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

问题描述 投票:0回答:2

有很多教程向您展示如何在 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 关系的示例之外,我找不到任何具体的教程或参考资料。

如果有人有可以简单地解决此问题的链接或示例,我应该能够自定义其余部分。

ruby-on-rails ruby view controller has-many-through
2个回答
4
投票

用户和运动员模型之间的关系本质上是一种

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 文档。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.