2011-05-01 39 views
0

我有一個表格創建一個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

你想要的是一個nested form。文章中提供了所有的細節,但基本上確保您在SignedUser模型中使用accept_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 %> 
+0

我不希望表單修改邀請模型中的屬性。同時,我嘗試添加'accepts_nested_attributes_for:邀請:allow_destroy => TRUE'但這沒有工作 – user730569 2011-05-01 06:12:57

+0

你需要,如果你想邀請屬性被髮送回服務器的形式使用fields_for。否則,您可以在SignedUsersController#create方法中創建您的邀請記錄:u.create_invitation。只要確保u.save和u.create_invitation指令是事務的一部分以避免持續存在不一致的數據。更妙的是,在SignedUser模型中使用after_create回調可以在每次創建新的SignedUser記錄時生成一個邀請記錄(在這種情況下無需擔心事務)。 – mbreining 2011-05-01 06:22:11

+0

回調的方法代碼是什麼樣的? – user730569 2011-05-01 06:28:56