Ứng dụng đường ray của tôi có 3 kiểu. Đường mòn, khu vực và tính năng. Tôi có thể tương tác với các mô hình này trong thư mục lib/tasks của tôi. Tôi đã sử dụng hải quỳ để thu thập dữ liệu và điền vào cơ sở dữ liệu. Ví dụ về các cuộc gọi tôi đã thực hiện trên các kiểu máy:Đường ray: Lỗi quá mức ngăn xếp
Trail.find_or_initialize_by_title(detail_title)
Tôi hiện đang cố viết một bộ điều khiển sử dụng mô hình.
class TrailController < ApplicationController
def index
render :json => Trail.all
end
end
Bây giờ nếu tôi mở đường ray giao diện điều khiển và thử app.get('trail/index')
tôi nhận được một mã số 500 trở lại và tôi thấy những điều sau đây trong tôi development.log
SystemStackError (stack mức quá sâu):
app/controllers/trail_controller.rb: 23: trong `index '
Vì vậy, tôi rõ ràng là gây ra một số đệ quy vô hạn. Dòng 23 tương ứng với phần thân của phương thức chỉ mục. Tôi đã thử các mô hình khác trong ứng dụng của tôi: Tính năng và khu vực và kết quả là như nhau. Ai đó có thể cho tôi biết những gì tôi đang làm sai ở đây, hoặc làm thế nào tôi có thể nhận được truy tìm nhiều hơn để tìm ra những gì chính xác là đệ quy vô hạn?
Mô hình của tôi rất đơn giản:
class Feature < ActiveRecord::Base
attr_accessible :name
has_and_belongs_to_many :trails
validates :name, :presence => true
end
class Region < ActiveRecord::Base
attr_accessible :hash_key, :name
has_many :trails
validates :hash_key, :name, :presence => true
end
class Trail < ActiveRecord::Base
# attr_accessible :title, :body
has_and_belongs_to_many :features
validates :title, :presence => true
end
Nó xuất hiện này là bằng cách nào đó được gây ra bởi các đá quý searchlogic. Tôi có điều này trong Gemfile của tôi:
gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.|~
Khi tôi nhận xét ra dòng đó, chạy bó cài đặt và thử lại app.get mọi thứ hoạt động tốt. Vì vậy, tìm kiếm bằng cách nào đó đang can thiệp vào Trail.all. Tại sao Trail.all không hoạt động với cài đặt tìm kiếm?
Điều gì xảy ra nếu bạn làm: 'trails = Trail.all; render json: trails'? –
Tôi đoán bạn ghi đè lên as_json hoặc to_json trong một trong các mô hình này. – apneadiving
Tôi đã thử 'trails = Trail.all; render: json => trails' và gặp lỗi tương tự. – theraju