2011-02-26 29 views
0

基本上我有兩個模型:用戶和教父。教父表具有三列:如何管理具有兩個外鍵的模型的形式

  • USER_ID(FK - >用戶)
  • user_godfather_id(FK - >用戶)
  • 描述(文本)

內的每個模型類,我添加了以下關聯:

class User < ActiveRecord::Base 

    has_many :godfathers # for user_id 
    has_many :other_godfathers, :foreign_key => "user_godfather_id", :class_name => "Godfather" 

    accepts_nested_attributes_for :godfathers 
end 

class Godfather < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :user_godfather, :class_name => "User" 
end 

現在我的問題是關於如何管理此嵌套屬性的編輯窗體關係。 這裏是我的形式看起來像此刻(使用nested_form_for寶石):

<%= nested_form_for @user do |f| %> 
      <%= f.fields_for :godfathers do |godfather_form| %> 
       # Here I have an ID text field but what I want instead is 
       # to provide a username for this godfather. 
       <%= godfather_form.label :user_godfather_id %> 
       <%= godfather_form.text_field :user_godfather_id %> 

       <%= godfather_form.label :description %> 
       <%= godfather_form.text_field :description %> 

       <%= godfather_form.link_to_remove "Remove this godfather" %> 
      <% end %> 
      <%= f.link_to_add "Add a godfather", :godfathers %> <br/><br/> 
<%= f.submit "Update Godfathers" %> 

因此,正如我在評論中說,我的目標是能夠提供教父用戶名,而不是一個ID的。順便說一下,該用戶名是User表中的一列。

有關我應該怎麼做的任何想法?

謝謝!

回答

1

只需使用不同的名稱爲關係

class User < ActiveRecord::Base 

    has_many :godfathers # for user_id 
    has_many :some_other_godfathers, :foreign_key => "user_godfather_id", :class_name => "Godfather" 

    accepts_nested_attributes_for :godfathers 
end 

現在你可以使用教父和some_other_godfathers。

希望對您有所幫助:-)

+0

謝謝!事實上,我沒有注意到這一點!但我的問題更多的是關於表單本身!如何編寫我的nested_form_for,例如我可以提供教父(這是用戶表中的一列)的用戶名而不是它的ID!任何想法? +1幫助無論如何:) – 2011-02-27 12:01:01

+0

我想只是將其更改爲:user_godfather_name並只在您的控制器中搜索該名稱... – Hock 2011-02-28 01:58:39

相關問題