我正在检查github上的complex_form_example项目。我修改了迁移文件,以便:内容从t.text更改为t.string(如下所示):请注意,t.string是我在github示例项目中更改的唯一位置,在更改之前工作。
class CreateQuestions < ActiveRecord::Migration
def self.up
create_table :questions do |t|
t.integer :survey_id
t.string :content
##t.text :content
t.timestamps
end
end
def self.down
drop_table :questions
end
end
这是nested_form_for代码:
<%= nested_form_for @survey do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<%= f.fields_for :questions, :questions do |g|%>
<p>
<%= g.label :content, "Question" %><br />
<%= g.input :content, :rows => 3 %><br />
<%= g.link_to_remove "remove" %>
</p>
<%= g.fields_for :answers %>
<p><%= g.link_to_add "Add an answer", :answers %></p>
<% end %>
<p><%= f.link_to_add "Add a question", :questions %></p>
<p><%= f.submit "Submit" %></p>
<% end %>
现在我收到以下错误消息:
undefined method `content' for :questions:Symbol
Extracted source (around line #10):
7: <%= f.fields_for :questions, :questions do |g|%>
8: <p>
9: <%= g.label :content, "Question" %><br />
10: <%= g.text_field :content, :rows => 3 %><br />
11: <%= g.link_to_remove "remove" %>
12: </p>
13: <%= g.fields_for :answers %>
我的问题是,是否有一个field_for字段名称直接支持字符串类型?
答案 0 :(得分:1)
你有:questions, :questions
......你看到了吗?在:questions
do
出现了两次
答案 1 :(得分:1)
fields_for
帮助程序用于获取要为其构建字段的对象,或者为要为其构建字段的对象集合的名称。
第一个例子是这样的:
<%= f.fields_for :object do |object_fields| %>
# fields go here
在这种情况下,它将构建该对象的字段。
第二个例子是相同的,但不同:
<%= f.fields_for :questions do |question_fields| 5>
# fields go here
<% end %>
假设您在questions
所表示的任何对象上有f
方法,这将迭代该集合中的所有对象,并为每个对象显示相同的字段。
请注意:没有必要再次指定:questions
。您只需要告诉Rails 一次。
现在,如果您正在执行此操作,您可能希望在父模型中使用accepts_nested_attributes_for :questions
(无论是has_many :questions
),以便将字段传递给控制器并成功进入模型的create
或update_attributes
来电。
答案 2 :(得分:0)
我似乎已经通过仔细地将fields_for标记与结束标记匹配来解决我自己的问题。其工作原理如下:在视图/调查中
<%= nested_form_for @survey do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<%= f.fields_for :questions do |g|%>
<%= render "question_fields", :f => g %>
<% end %>
<p><%= f.link_to_add "Add a question", :questions %></p>
<p><%= f.submit "Submit" %></p>
<% end %>
在部分_question_fields中:
<p>
<%= f.label :content, "Question" %><br />
<%= f.text_field :content, :rows => 3 %><br />
<%= f.link_to_remove "remove" %>
</p>
<%= f.fields_for :answers %>
<p><%= f.link_to_add "Add an answer", :answers %></p>
请注意,“f.fields_for:answers”默认使用部分_answer_fields。