![](/img/trans.png)
[英]Ruby on Rails trouble creating record with has_many :through relationship
[英]Creating controllers and views for a has_many :through relationship in Rails 3
有許多教程向您展示如何在Rails中為has_many:through關系創建模型指令,但似乎沒有很多文章與設置表單以創建和編輯這些關系的過程相關。 我正在尋求一些幫助(或很好的例子),說明如何創建一個允許用戶在Rails應用程序中管理這些類型的關系的界面。
這是場景:
我有用戶,關系和運動員。 用戶可以與各種角色的運動員建立關系:教練,導師,家長或粉絲。
這是我的模特:
class User < ActiveRecord::Base
has_many :relationships
has_many :athletes, :through => :relationships
end
class Athlete < ActiveRecord :: Base
has_many :relationships
has_many :users, :through => :relationships
end
class Relationship < ActiveRecord :: Base
belongs_to :users
belongs_to :athletes
end
因此,下一步是構建視圖和控制器,允許我創建用戶到運動員的關系(與教練,父母等角色),編輯關系或破壞關系。
最終,我的目標是建立一個用戶可以創建運動員並選擇相關關系的場景。
不幸的是,我找不到任何特定的教程或參考資料,這些教程或參考資料比模型說明或has_many關系的示例更多。
如果有人有一個鏈接或示例可以在一個簡單的級別解決這個問題,我應該能夠自定義其余的。
您在User和Athlete模型之間的關系本質上是has_and_belongs_to_many
關系( has_and_belongs_to_many
)。 通過和你一起來回看,你似乎對創造這些關系的最佳方式感到困惑。
開始閱讀的好地方是ActiveRecord協會的文檔 ,特別是HABTM關系的文檔 。
你的模型設置很好。 現在您已經建立了HABTM關系,這就是您可以做的事情。 讓我們假設你的運動員和用戶模型都非常簡單,只有一個name
屬性,這是一個字符串。 您現在可以執行此類代碼(這是rails控制台的控制台輸出):
User.create(:name => "Jeff")
usr = User.first
=> #<User id: 1, name: "Jeff">
usr.athletes
=> []
atl = usr.athletes.create(:name => "Mike")
=> #<Athlete id: 1, name: "Mike">
上面的行將創建一個名為Mike的用戶,並自動創建一個具有相應屬性的關系條目以鏈接這兩者。 所以現在如果你這樣稱呼:
usr.athletes
=> [#<Athlete id: 1, name: "Mike">]
現在,如果你想允許用戶決定他們自己和運動員創建運動員之間的關系,你可以設置你的Relationship類有一個string
類型的relation
字段,並在創建關系時(如上所示) ,你可以這樣做:
rel = usr.relationships.where(:user_id => usr.id, :athlete_id => atl.id).first
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => nil>
rel.relation = "Friend"
rel.save
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => "Friend">
希望這比我原來的答案更有幫助。 如果您有任何疑問,請告訴我。 絕對一定要看看我上面提到的ActiveRecord Associations文檔。
嘗試使用railscast或ascii強制轉換。 這就是我經常開始的地方。 不確定這是否是您所追求的,但是這些網站上有嵌套表單的教程。 我認為這是復雜的形式。 無論如何,值得閱讀/觀看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.