我在用户和目标之间有一对一的关系。我想建立一个表单,显示用户的目标。问题是,我的代码只有在用户已经定义了目标时才能工作。当没有目标时,文本字段不呈现。
<%= user_builder.fields_for :goal do |goal_builder| %>
<%= goal_builder.text_field :goal %>
<% end %>
Rails提供了一种简单的方法来做到这一点吗?
我是这样做的:
class User < ActiveRecord::Base
has_one :goal
accepts_nested_attributes_for :goal
after_initialize do
self.goal ||= self.build_goal()
end
end
使用accepts_nested_attributes_for
可以很容易地做到这一点。
在视图中,如您所见:
<%= user_builder.fields_for :goal do |goal_builder| %>
<%= goal_builder.text_field :goal %>
<% end %>
在User模型中:
class User < ActiveRecord::Base
has_one :goal # or belongs_to, depending on how you set up your tables
accepts_nested_attributes_for :goal
end
请参阅嵌套属性的文档,以及form_for方法获取更多信息。