在Rails 3中为has_many:through关系创建控制器和视图

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关系的示例更多.

如果有人有一个链接或示例可以在一个简单的级别解决这个问题,我应该能够自定义其余的.

Bat*_*ins 4

您在此处与用户和运动员模型之间的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文档.