我有一个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/

10-13 03:05