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 thisimage\u classes(image)。join(“”)视图中的
。似乎
helper的
div\u不接受数组作为选项的值。