我正在研究Rails 4应用程序,最近遇到了一个奇怪的问题。我在这里寻求你的帮助。请建议。
已创建小小的gist片段以了解问题undefined method committed?
总结一切:
# app/models
class User < ActiveRecord::Base
has_many :responses, dependent: :destroy
end
class Response < ActiveRecord::Base
has_one :report
has_many :points
belongs_to :user
end
class Report < ActiveRecord::Base
belongs_to :response
end
class Point < ActiveRecord::Base
belongs_to :response
end
# config/routes.rb
resources :users do
resources :responses do
resources :action_plans
end
end
# app/controllers/action_plans_controller.rb
class ActionPlansController < ApplicationController
before_filter :response
def new
@report = @response.build_report
5.times do
@response.points.build
end
end
private
def response
@response = current_user.responses.find(params[:id])
end
end
每当我试图击中时:
http://localhost:3000/users/:user_id/responses/:id/action_plans/new
我收到的错误是:未定义的方法`已提交?&#39;用于响应对象。我在这里做错了什么?
答案 0 :(得分:6)
通过在控制器中定义一个名为response
的方法,您可以覆盖Rails使用的内部getter。要解决此问题,只需为之前的操作使用其他名称。命名操作的常用方法是使用set_<entity name>
,因此set_response
就是。
答案 1 :(得分:0)
在ActionDispatch(ActionDispatch :: Response)中有一个名为Response的响应类,它在整个Rails中使用。可能是你实际上是在击中响应对象而不是你的模型吗?也许使用pry-rails从里面调试它?