如何解决管理模型中的多个外键
| 我正在努力在Rails的模型之间建立良好的架构/关联,并希望提出一些建议。一个“玩家”有多个“小菜”,每个“小菜”由三个有序的“骑手”组成。 总结架构:create_table players do |t|
t.string \"name\"
...
end
create_table picks do |t|
t.integer \"player_id\"
t.integer \"rider1_id\"
t.integer \"rider2_id\"
t.integer \"rider3_id\"
...
end
create_table riders do |t|
t.string \"name\"
...
end
我建立了一些模型之间的关联:
player.rb:
class Player < ActiveRecord::Base
has_many :picks
end
pick.rb:
class Pick < ActiveRecord::Base
has_many :riders,:foreign_key => \"rider1_id\"
has_many :riders,:foreign_key => \"rider2_id\"
has_many :riders,:foreign_key => \"rider3_id\"
belongs_to :player
end
rider.rb
class Rider < ActiveRecord::Base
belongs_to :pick
end
我感到/知道我在上面的代码中缺少对关联的一些基本了解。特别是,我希望能够说一些类似的内容:\“ myPick.rider1.name \”。我还可以查看哪些选秀权包括给定的骑手,例如\“ myRider.picks \”(尽管我不确定这是否有可能)。从根本上说,我不确定在拣选模型中具有三个“搭便车”外键是否是正确的主意。
在此先感谢您的任何建议。
干杯,
雅克
解决方法
您的联想有点倒退。带外键“ 2”的表不带外键的表。因此,您应该有3个3个呼叫来代替4个呼叫。
# player.rb:
class Player < ActiveRecord::Base
has_many :picks
end
# pick.rb:
class Pick < ActiveRecord::Base
belongs_to :rider1,:class => \'Rider\'
belongs_to :rider2,:class => \'Rider\'
belongs_to :rider3,:class => \'Rider\'
belongs_to :player
def riders
# returns an array so you can say pick.riders.each { |rider| ... }
# but it doesn\'t give you an ActiveRecord::AssociationProxy so you cannot
# do things like pick.riders.where(:condition => true)
[rider1,rider2,rider3]
end
end
# rider.rb
class Rider < ActiveRecord::Base
has_one :pick
end
这仍然不如进行ѭ6并强制限制每个选秀的骑手人数(使用预期的内置关系)那样干净。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。