Ruby on rails 上的访问属性已通过多个

Ruby on rails 上的访问属性已通过多个,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,每次我重新审视这个问题,都会让我感到困惑,我在寻求更彻底的理解 我有 class Image < ActiveRecord::Base has_many :image_categories, dependent: :destroy has_many :categories, through: :image_categories end class PagesController def portfolio @images = Image.all end end

每次我重新审视这个问题,都会让我感到困惑,我在寻求更彻底的理解

我有

class Image < ActiveRecord::Base
  has_many :image_categories, dependent: :destroy
  has_many :categories, through: :image_categories
end

class PagesController
  def portfolio
    @images = Image.all
  end
end
类映像
在我的视图中,我希望显示所有图像,然后将每个类别名称打印为类名

<%= @images.each do |i| %>
  <div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 ## class names here">
    <%= image_tag(i.photo.url(:image_square_home)) %>
 </div>

您想使用以下代码:

<%= i.categories.pluck(:name).join %>

这会将与当前图像关联的每个类别的名称捕获到一个数组中,然后将它们连接到一个由空格分隔的字符串中

实际上,它将如下所示:

<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name).join %>">
    <%= image_tag(i.photo.url(:image_square_home)) %>
</div>
# app/helpers/pages_helper.rb    
module PagesHelper
  def image_classes(image)
    %w(isotope-item ok-md-3 ok-xsd-12 ok-sd-6) + categories_names(image)    
  end

  private

  def categories_names(image)
    image.categories.pluck(:name)
  end
end

# app/views/pages/portfolio.rb
<%- @images.each do |image| %>    
  <%= div_for image, class: image_classes(image) do |img| %>
    <%= image_tag img.photo.url(:image_square_home) %>
  <%= end %>
<% end %>

您想使用以下代码:

<%= i.categories.pluck(:name).join %>

这会将与当前图像关联的每个类别的名称捕获到一个数组中,然后将它们连接到一个由空格分隔的字符串中

实际上,它将如下所示:

<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name).join %>">
    <%= image_tag(i.photo.url(:image_square_home)) %>
</div>
# app/helpers/pages_helper.rb    
module PagesHelper
  def image_classes(image)
    %w(isotope-item ok-md-3 ok-xsd-12 ok-sd-6) + categories_names(image)    
  end

  private

  def categories_names(image)
    image.categories.pluck(:name)
  end
end

# app/views/pages/portfolio.rb
<%- @images.each do |image| %>    
  <%= div_for image, class: image_classes(image) do |img| %>
    <%= image_tag img.photo.url(:image_square_home) %>
  <%= end %>
<% end %>

由于要向div添加多个类名,请尝试以下操作:

<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name) %>">

如果图像可能没有类别,您可能需要使用
try
方法:


既然要向div添加多个类名,请尝试以下操作:

<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name) %>">

如果图像可能没有类别,您可能需要使用
try
方法:


您可以在帮助文件(例如
PagesHelper
中处理此问题,以尽可能保持视图和模型的干净。它可能如下所示:

<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name).join %>">
    <%= image_tag(i.photo.url(:image_square_home)) %>
</div>
# app/helpers/pages_helper.rb    
module PagesHelper
  def image_classes(image)
    %w(isotope-item ok-md-3 ok-xsd-12 ok-sd-6) + categories_names(image)    
  end

  private

  def categories_names(image)
    image.categories.pluck(:name)
  end
end

# app/views/pages/portfolio.rb
<%- @images.each do |image| %>    
  <%= div_for image, class: image_classes(image) do |img| %>
    <%= image_tag img.photo.url(:image_square_home) %>
  <%= end %>
<% end %>
#app/helpers/pages_helper.rb
模块分页器
def图像_类(图像)
%w(同位素项目ok-md-3 ok-xsd-12 ok-sd-6)+类别名称(图)
结束
私有的
def类别_名称(图像)
image.categories.pull(:name)
结束
结束
#app/views/pages/portfolio.rb

您可以在帮助文件(例如
PagesHelper
中处理此问题,以尽可能保持视图和模型的干净。它可能如下所示:

<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name).join %>">
    <%= image_tag(i.photo.url(:image_square_home)) %>
</div>
# app/helpers/pages_helper.rb    
module PagesHelper
  def image_classes(image)
    %w(isotope-item ok-md-3 ok-xsd-12 ok-sd-6) + categories_names(image)    
  end

  private

  def categories_names(image)
    image.categories.pluck(:name)
  end
end

# app/views/pages/portfolio.rb
<%- @images.each do |image| %>    
  <%= div_for image, class: image_classes(image) do |img| %>
    <%= image_tag img.photo.url(:image_square_home) %>
  <%= end %>
<% end %>
#app/helpers/pages_helper.rb
模块分页器
def图像_类(图像)
%w(同位素项目ok-md-3 ok-xsd-12 ok-sd-6)+类别名称(图)
结束
私有的
def类别_名称(图像)
image.categories.pull(:name)
结束
结束
#app/views/pages/portfolio.rb

由于图像具有多个类别,您是否正在尝试向div添加多个“类名”?是的,这正是我试图实现的目标您是否尝试添加多个“类名”对于您的div,因为图像有许多类别?是的,这就是我试图实现的。我认为在这里使用
try
是不正确的。如果图像没有任何类别,那么将返回一个空的
Category::ActiveRecord\u AssociationRelation
,它永远不会
nil
。如果没有类别,则
清除(:name)
将返回一个空数组(
[]
)。我认为在此处使用
try
是不正确的。如果图像没有任何类别,则将返回一个空的
类别::ActiveRecord\u AssociationRelation
,该数组永远不会
为nil
。如果没有类别,则
清除(:name)
将返回一个空数组(
[]
)。感谢您的回答,它确实有助于清理视图,但syntac是否完全正确,以及
类:categories\u names
是否也正确?1获取了错误的参数数量0令人担忧的是,这与我没有在视图中将参数传递给
image\u classes
方法有关。我更新了代码,所以请再试一次。没问题,但下一个问题不是字符串到数组的隐式转换。别担心,明白了,使用
试试这个
图像_类(图像)。加入(“”)
在视图中。似乎
div\u for
helper不接受数组作为选项的值。感谢您的回答,它确实有助于清理视图,但是syntac是否完全正确,以及
class:categories\u name
是否也正确?1的参数数量错误抱歉,这与事实上,我没有在视图中将参数传递给
image\u classes
方法。我更新了代码,所以请再试一次。没问题,下一个问题是没有将字符串隐式转换为数组。别担心,明白了,使用
try this
image\u classes(image)。join(“”)视图中的
。似乎
helper的
div\u不接受数组作为选项的值。