我有一个Project模型,该模型可以通过Benefit模型来包含许多产品(反之亦然)。在“收益”选项卡中,对project_id和product_id进行了唯一索引。
我创建了Benefit模型,以便能够将产品添加到多个项目中,并且我想通过每个Benefit(benefit.title等)添加额外的数据。
我可以显示每个项目的产品,但不能显示其他任何Benefit.value。
我的项目模型与以下好处相关联:
has_many :benefits
has_many :products, through: :benefits
在我的项目视图(show.html.erb)中,我正在显示我的产品字段,如下所示:
<% @products.each do |product| %>
<%= link_to [product.project, product] do %>
<div class="row">
<div class="col m3">
<img height="20" src="<%= product.image %>"></img>
</div>
<div class="col m3">
<%= product.name %>
</div>
<div class="col m3 truncate">
<%= product.content %>
</div>
<div class="col m3">
<i class="tiny red-text material-icons right">favorite_border</i>
</div>
</div>
<% end %>
<% end %>
但是当我尝试添加以下内容时,它告诉我正在使用未定义的局部变量或方法“ Benefit”:
<% @products.each do |product| %>
<%= link_to [product.project, product] do %>
<div class="row">
<div class="col m3">
<img height="20" src="<%= product.image %>"></img>
</div>
<div class="col m3">
<%= product.name %>
</div>
<div class="col m3 truncate">
<%= benefit.title %>
</div>
<div class="col m3">
<i class="tiny red-text material-icons right">favorite_border</i>
</div>
</div>
<% end %>
<% end %>
有关如何处理此问题的任何想法?
我使用的是Ruby-on-Rails 4.2.0,但是我是新手(如您所见;))
我的产品型号的额外代码:
class Product < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
belongs_to :project
belongs_to :benefit
has_many :subscriptions
has_many :users, through: :subscriptions
has_many :benefits
has_many :projects, through: :benefits
has_many :reviews
validates :name, presence: true, length: { maximum: 50 }
validates :gtin, presence: true
validates :content, presence: true, length: { maximum: 500 }
validates :video, presence: true
validates :tag, presence: false
validates :project, presence: true
has_attached_file :image, :styles => { :medium => "680x300>", :thumb => "170x75>" }
validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
def average_rating
reviews.blank? ? 0 : reviews.average(:star).round(2)
end
end
*更新工作代码:基于此问题的评论,我能够显示与任何利益相关的产品(已连接到项目)的列表。我错误地创建了一个额外的循环,现在已解决。这是我的
project/show.html.erb
中的最终工作代码:<% @products.each do |product| %>
<% product.benefits.each do |benefit| %>
<%= link_to [product.project, product] do %>
<div class="row">
<div class="col m3">
<img height="20" src="<%= product.image %>"></img>
</div>
<div class="col m3">
<%= product.name %>
</div>
<div class="col m3 truncate">
<%= product.benefits.first.title %>
</div>
<div class="col m3">
<i class="tiny red-text material-icons right">favorite_border</i>
</div>
</div>
<% end %>
<% end %>
<% end %>
最佳答案
更新:
在本期中,您必须循环每种福利产品,因为您不能一次获得许多关联。
您必须使用对象产品来调用收益。尝试以下循环每种好处:
<%= product.benefits.each | benefit| %>
<div class="col m3 truncate">
<%= benefit.title %>
</div>
<% end %>
尝试以下以获得第一项产品利益:
<%= product.benefits.first.title %>
这是为了获得所有收益加入(,):
<%= product.benefits.map(&:title).join(", ") %>
关于mysql - 如何显示连接另一个表的表中的字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32888251/