Ran*_*ess 7 ruby controller ruby-on-rails view has-many-through
有许多教程向您展示如何在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
Run Code Online (Sandbox Code Playgroud)
因此,下一步是构建视图和控制器,允许我创建用户到运动员的关系(与教练,父母等角色),编辑关系或破坏关系.
最终,我的目标是建立一个用户可以创建运动员并选择相关关系的场景.
不幸的是,我找不到任何特定的教程或参考资料,这些教程或参考资料比模型说明或has_many关系的示例更多.
如果有人有一个链接或示例可以在一个简单的级别解决这个问题,我应该能够自定义其余的.
您在此处与用户和运动员模型之间的has_and_belongs_to_many关系本质上是一种关系(HABTM).通过和你一起来回看,你似乎对创造这些关系的最佳方式感到困惑.
开始阅读的好地方是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">
Run Code Online (Sandbox Code Playgroud)
上面的行将创建一个名为Mike的用户,并自动创建一个具有相应属性的关系条目以链接这两者.所以现在如果你这样称呼:
usr.athletes
=> [#<Athlete id: 1, name: "Mike">]
Run Code Online (Sandbox Code Playgroud)
现在,如果你想允许用户决定他们自己和运动员创建运动员之间的关系,你可以设置你的关系类有一个relation类型的领域string,并在创建关系时(如我刚刚在上面显示),你然后可以做这样的事情:
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">
Run Code Online (Sandbox Code Playgroud)
希望这比我原来的答案更有帮助.如果您有任何疑问,请告诉我.绝对一定要看看我上面提到的ActiveRecord Associations文档.
| 归档时间: |
|
| 查看次数: |
8495 次 |
| 最近记录: |