无法在rails中为嵌套模型表单创建新对象之间的关联

时间:2012-09-03 11:33:11

标签: html ruby-on-rails ruby

我正在railscasts观看,并试图亲自动手写下这个例子。 但我遇到了以下步骤的麻烦:创建表格。

它需要在Survey和Question之间建立关联。 但是我的rails应用程序中无法建立此关联,因此表单中不会出现任何问题

以下是代码

调查模型:

class Survey < ActiveRecord::Base
  attr_accessible :name, :questions
  has_many :questions, :dependent => :destroy
  accepts_nested_attributes_for :questions

end

问题模型:

class Question < ActiveRecord::Base
  attr_accessible :context, :survey_id
  belongs_to :survey
end

Surveys_Controller方法:

  # GET /surveys/new
  # GET /surveys/new.json
  def new
    @survey = Survey.new
    3.times {@survey.questions.build}


    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @survey }
    end
  end

_form.html.erb中的问题部分

  <% f.fields_for :questions do |builder|%>
    <%= builder.label :context, "Question" %><br />
    <%= builder.text_area :context, :rows => 3 %>
  <% end %>

以下是我在控制台测试中获得的内容

irb(main):010:0> @survey = Survey.new
=> #<Survey id: nil, name: nil, created_at: nil, updated_at: nil>
irb(main):011:0> 3.times {@survey.questions.build}
=> 3
irb(main):012:0> @survey.questions
=> [#<Question id: nil, survey_id: nil, context: nil, created_at: nil, updated_a
t: nil>, #<Question id: nil, survey_id: nil, context: nil, created_at: nil, upda
ted_at: nil>, #<Question id: nil, survey_id: nil, context: nil, created_at: nil,
 updated_at: nil>]

3 个答案:

答案 0 :(得分:1)

你有一个新的模型对象。你为空对象创建了3个问题。你的问题必须是空的。它没有保存或定义。

答案 1 :(得分:1)

如果我理解你的问题,你的表格中没有问题。您需要在表单中为一个问题提供一个表单。你在做什么问题吗?

您需要以下内容:

<% survey.questions.each do |question| %>
      <%= fields_for question do |builder| %>

答案 2 :(得分:0)

哈哈,我是个傻瓜。 这是一个愚蠢的问题。 这与协会无关。

我在

上犯了输入错误

<% f.fields_for :questions do |builder|%>

它应该返回一些插入HTML文档的文本,而不仅仅是处理为ruby代码

应为<%= f.fields_for :questions do |builder|%>

但是,谢谢你的所有答案:)