0

我正在观看railscasts并尝试用自己的双手编写示例。但是我在以下步骤中遇到了麻烦:创建表单。

它需要在调查和问题之间创建关联。但是无法在我的 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>]
4

3 回答 3

1

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

于 2012-09-03T11:47:20.210 回答
1

如果我正确理解您的问题,则您的表格中看不到问题。您需要为表格中的一个问题提供一份表格。你在做 questions.each 吗?

你需要类似的东西:

<% survey.questions.each do |question| %>
      <%= fields_for question do |builder| %>
于 2012-09-03T11:49:49.580 回答
0

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

我打错字了

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

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

它应该是<%= f.fields_for :questions do |builder|%>

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

于 2012-09-03T12:54:14.453 回答