有很多教程向您展示如何在 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 关系的示例之外,我找不到任何具体的教程或参考资料。
如果有人有可以简单地解决此问题的链接或示例,我应该能够自定义其余部分。
用户和运动员模型之间的关系本质上是一种
has_and_belongs_to_many
关系 (HABTM)。通过与您反复讨论,您似乎对建立这些关系的最佳方式感到困惑。
ActiveRecord 关联的文档是一个很好的开始阅读位置,特别是 HABTM 关系的文档。
您的模型设置很好。现在您已经设置了 HABTM 关系,您可以执行以下操作。假设您的 Athlete 和 User 模型都非常简单,除了一个
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">]
现在,如果您希望允许用户在创建运动员时指定他们与运动员之间的关系,您可以将您的关系类设置为具有类型为
relation
的字段,并且在创建关系时(如我刚刚在上面显示),然后你可以做这样的事情:string
希望这比我原来的答案更有帮助。如果您有任何疑问,请告诉我。并且一定要查看我上面提到的 ActiveRecord Associations 文档。