有许多教程向您展示如何在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关系的示例更多。
如果有人有一个可以在简单的级别上解决这个问题的链接或示例,我应该可以自定义其余部分。
答案 0 :(得分:5)
您在此处与用户和运动员模型之间的关系基本上是has_and_belongs_to_many
关系(HABTM)。通过和你一起来回看,你似乎对创造这些关系的最佳方式感到困惑。
开始阅读的好地方将在ActiveRecord协会的文档中,特别是the documentation for HABTM relationships。
你的模型设置很好。现在您已经建立了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">
上面的行将创建一个名为Mike的用户,并自动创建一个具有相应属性的关系条目以链接这两者。所以现在如果你这样称呼:
usr.athletes
=> [#<Athlete id: 1, name: "Mike">]
现在,如果您想让用户决定他们与创建运动员的运动员之间的关系,您可以将您的关系类设置为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文档。
答案 1 :(得分:0)
尝试使用railscast或ascii强制转换。这就是我经常开始的地方。不确定这是否属于您之后的问题,但是这些网站上有嵌套表单的教程。我认为它处于复杂的形式。无论如何,值得阅读/观看。