gpt4 book ai didi

ruby-on-rails - 为 has_many :through relationship in Rails 3 创建 Controller 和 View

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:20 27 4
gpt4 key购买 nike

有很多教程向您展示如何在 Rails 中为 has_many :through 关系创建模型指令,但似乎没有很多文章与设置表单以创建和编辑这些关系的过程相关。我正在寻求一些帮助(或很好的例子)来了解如何创建一个允许用户在 Rails 应用程序中管理这些类型的关系的界面。

场景如下:

I have Users, Relationships, and Athletes. A User can have a Relationship with an Athlete in a variety of roles: Coach, Mentor, Parent, or Fan.

这是我的模型:

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

因此,下一步是构建 View 和 Controller ,允许我创建用户与运动员的关系(与教练、家长等角色)、编辑关系或破坏关系。

最终,我的目标是实现用户可以创建运动员并选择关联关系的场景。

不幸的是,除了模型说明或 has_many 关系的示例,我找不到任何具体的教程或引用。

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

最佳答案

此处 User 和 Athlete 模型之间的关系本质上是 has_and_belongs_to_many 关系 (HABTM)。通过与您来回交流,您似乎对建立这些关系的最佳方式感到困惑。

开始阅读的好地方是 ActiveRecord 关联的文档,特别是 the documentation for HABTM relationships .

您的模型设置没问题。现在您已经设置了 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">]

现在,如果您希望允许用户在创建 Athlete 时指定他们与 Athlete 之间的关系,您可以将 Relationship 类设置为具有 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">

希望这比我原来的回答更有帮助。如果您有任何问题,请告诉我。并且一定要查看我上面提到的 ActiveRecord Associations 文档。

关于ruby-on-rails - 为 has_many :through relationship in Rails 3 创建 Controller 和 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8059238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com