请原谅我。
我搜索了一段时间,我怀疑我是在问一个错误的问题,因此得到了“错误”的答案
我有一个带有3个控制器的Rails项目,具有相应的视图和一个模型
我为他们准备了足够的路线,并且可以对每个路线执行CRUD
-卡
-套装
-JoinCardSets
它们的数据库架构为:
表名:卡片
id
cardName
description
imageUrl
表格名称:套
id
setName
description
imageUrl
表格名称:join_card_sets
id
card_id
set_id
no_of_cards
卡和套之间有很多关系,因此我的模型如下所示:
class Card < ApplicationRecord
has_many :join_card_sets
has_many :sets, :through => :join_card_sets
end
class Set < ApplicationRecord
has_many :join_card_sets
has_many :cards, :through => :join_card_sets
end
class JoinCardSet < ApplicationRecord
belongs_to :set
belongs_to :card
end
当我导航到CardsController#Show
显示:
卡名,
说明,
并通过联结表将与之链接的集合用于一些rails magic
控制器:
def show
@mtg_card = Card.find(params[:id])
@current_sets = @mtg_card.mtg_sets
end
“显示”视图:
<h2><%= @card.name %></h2>
<%= @card.description %><br>
<img src="<%= @card.imageUrl %>" alt="<%= @card.name %>"><br>
<% if @current_sets.present?
@current_sets.each do |t| %>
<%= t.name %>: <%= %>
<% end #end of for each loop current_set |t| %>
<% end #end of if statment %>
我需要以下方面的帮助:
当@current_sets遍历每个连接时,
我希望它显示“ no_of_cards”列,并将其与卡集名称一起显示。
如果不清楚,或者您知道答案在哪里,请告诉我
答案 0 :(得分:1)
使用ActiveRecord的技巧是在关联的网络中找到正确的点,以使您正在迭代的对象本身具有足够的信息以供查看,或者具有可遍历的关联以获取该信息。模式中的Set
对象具有许多card_join_sets,因此无法获取单个相关的“ no_of_cards”。 JoinCardSet
对象只有一个集合,因此很容易获得相关集合来获取名称。
在控制器中:
@current_join_sets = @mtg_card.join_card_sets
然后在您看来:
@current_join_sets.each do |t| %>
<%= t.set.name %>: <%= t.no_of_cards %>
<% end #end of for each loop current_set |t| %>
(在实际代码中,这里还有更多要清理的地方。t.set.name
破坏了Law of demeter,您应该急于加载数据,但这在这个问题上是不切实际的。)>