我有一个项目模型,可以通过模型Benefit包含许多产品(反之亦然,产品模型)。在Benefits表格中,project_id和product_id是唯一索引的。
我已经创建了Benefit模型,可以将产品添加到多个项目中,我想通过每个好处添加额外的数据(benefit.title等)。
我能够显示每个项目的产品,但我无法显示任何其他好处。价值。
我的项目模型与这样的好处相关联:
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 %>
答案 0 :(得分:2)
<强>更新强> 在本期中,您必须循环每个福利形式的产品,因为您不能在一个产品中获得许多关联。
您必须使用对象产品来拨打福利。试试这个循环每个好处:
<%= product.benefits.each | benefit| %>
<div class="col m3 truncate">
<%= benefit.title %>
</div>
<% end %>
尝试这样可以获得第一个产品优势:
<%= product.benefits.first.title %>
这是为了获得所有好处加入(,):
<%= product.benefits.map(&:title).join(", ") %>