我有一个创建signed_user
的表单。这是表格的第一行:
<%= form_for(setup_user(@signed_user)) do |f| %>
setup_user在我的应用程序助手中:
def setup_user(user)
user.tap do |u|
u.build_invitation
end
end
这些是模型关联:
signed_user
型号:
has_one :invitation, :foreign_key => "sender_id"
invitation
型号:
belongs_to :sender, :class_name => 'SignedUser'
那么为什么在没有邀请的情况下创建用户呢?我检查了我的控制台,用户的邀请是零......
答案 0 :(得分:0)
你想要的是nested form。文章中提供了所有详细信息,但基本上确保在SignedUser模型中使用accepts_nested_attributes_for。
class SignedUser < ActiveRecord::Base
...
has_one :invitation, :foreign_key => "sender_id"
accepts_nested_attributes_for :invitation, :allow_destroy => true
...
end
如果您希望表单修改邀请模型中的属性(除了SignedUser中的属性),您还需要在表单中使用fields_for。例如:
<%= form_for setup_user(@signed_user) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
// More user form fields
<%= f.fields_for :invitation do |cf| %>
<%= cf.label :event_name %>
<%= cf.text_field :event_name %>
// More invitation form fields
<% end %>
<%= submit_tag %>
<% end %>