簡體   English   中英

在Rails 3中為has_many:through關系創建控制器和視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM