1

我有...

耙路线:

edit_report_question
GET
/reports/:report_id/questions/:id/edit(.:format)
questions#edit

questions_controller.rb:

  def edit
    @report = Report.find(params[:report_id])
    @questions = @report.questions.find(params[:id])
  end

报告.rb:

has_many :questions

问题.rb:

belongs_to :report

编辑.html.haml:

.textbox
  = render "shared/notice"
  %h1 Edit Question
  = render "form"
  = render "actions"

_form.html.haml:

= simple_form_for [@report, @question] do |f|
  = f.error_notification
  = f.association :report
  = f.input :description
  = f.input :blueprint_name, :label => "Blueprint Name"
  = f.input :blueprint_url, :label => "Blueprint URL"
  = f.association :element, :label => "Website Element"
  = f.association :standard
  - if params[:action]=~ /edit/
    = f.association :fields, :as => :select
  = f.button :submit, :id => 'submit_question'

参数:

{"action"=>"edit", "controller"=>"questions", "report_id"=>"1", "id"=>"1"}

那么为什么我会收到“NilClass:Class 的未定义方法 `model_name'”错误?

注意:目前每个报告都有很多问题,但最终我希望报告有很多并且属于很多问题。

4

2 回答 2

2

您尚未在控制器中的任何地方定义“@question”,我认为您的控制器操作应该像

def edit
  @report   = Report.find(params[:report_id])
  @question = @report.questions.find(params[:id]) # replacing @questions with @question
end

您收到 nil 类错误,因为 @questions 是一个实例变量,其中没有任何内容。另外,请在发布前尝试挖掘。谢谢

于 2013-02-20T06:22:04.650 回答
1

导致错误的行是这一行

simple_form_for [@report, @question]

因为在控制器中,您没有 @question 变量,Rails 无法推断表单的路径。我认为@questions应该有@question

@questions = @report.questions.find(params[:id])
于 2013-02-20T06:12:24.820 回答