Rails4:未定义的方法`已提交?对于模型对象

时间:2014-12-08 14:01:12

标签: ruby-on-rails ruby-on-rails-4

我正在研究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;用于响应对象。我在这里做错了什么?

2 个答案:

答案 0 :(得分:6)

通过在控制器中定义一个名为response的方法,您可以覆盖Rails使用的内部getter。要解决此问题,只需为之前的操作使用其他名称。命名操作的常用方法是使用set_<entity name>,因此set_response就是。

答案 1 :(得分:0)

在ActionDispatch(ActionDispatch :: Response)中有一个名为Response的响应类,它在整个Rails中使用。可能是你实际上是在击中响应对象而不是你的模型吗?也许使用pry-rails从里面调试它?