我这里有用于名称标记的过滤器。我想做的是,如果我有一个以上的标志名称来删除其他
检查附带的图像。我有两个Serfer名字。我只想显示一个
请帮助我!谢谢
<div class="categories">
<% @oferta.each do |o| %>
<ul class="cat">
<li class="pull-left"><h2><%= link_to o.offer,o %></h2><br><h4><%= o.description %></h4>
<div class="main">
<% if o.sigs.exists? %>
<div id="myBtnContainer">
<button class="btn active" onclick="filterSelection('o')">All</button>
<% for item in o.sigs %>
<button class="btn" onclick="filterSelection('<%= item.name %>')"><%= item.name%><br></button>
<% end %>
</div>
<div class="row">
<% for item in o.sigs %>
<div class="column <%= item.name %>">
<div class="content">
<%= image_tag item.image.url(), style: "width:100%"%>
<h4><br><%=link_to item.name,item %></h4>
<p><%= item.comment %></p>
</div>
</div>
<% end %><br><br>
</div>
<% end %><br>
</div>
<% end %>
</div>
这是oferta_controller.rb
class OfertaController < ApplicationController
before_action :find_ofertum, only: [:destroy,:edit,:update,:show]
def new
@ofertum= Ofertum.new
end
def create
@ofertum= Ofertum.new(ofertum_attributes)
if @ofertum.save
redirect_to oferta_path, notice: "Thank you... Your offer was created successfully."
else
flash.now[:error] = "Please correct the form"
redirect_to new_ofertum_path
end
end
def index
@oferta = Ofertum.all
end
def show
@ofertum = Ofertum.find(params[:id])
@sig = @ofertum.sigs.build
end
private
def ofertum_attributes
ofertum_attributes = params.require(:ofertum).permit([:offer,:description,:sign,:place,:sig])
end
def find_ofertum
@ofertum = Ofertum.find(params[:id])
end
end
在铁塔模型中
class Ofertum < ApplicationRecord
has_many :sigs
end
在信号模型中
class Sig < ApplicationRecord
belongs_to :ofertum
end
答案 0 :(得分:1)
在您的控制器中,创建一个包含所有@sigs
的新sigs
变量,因此
@sig_names = []
@sigs_names = Ofertum.all.each do |ofertum|
ofertum.sig.each do |sig|
@sig_names << sig.name
end
end
编辑,可能有更好的方法来检索它,但我想不出rn:D
并使用它来创建过滤器栏。
因此,与其在@oferats内部执行for循环,不如在@sig_cards上进行迭代以生成搜索栏。
然后通常在第二个循环中遍历@ofertas
来创建卡片。
删除代码的这一部分
<% if o.sigs.exists? %>
<div id="myBtnContainer">
<button class="btn active" onclick="filterSelection('o')">All</button>
<% for item in o.sigs %>
<button class="btn" onclick="filterSelection('<%= item.name %>')"><%= item.name%><br></button>
<% end %>
</div>
改为执行此操作:
<div id="myBtnContainer">
<button class="btn active" onclick="filterSelection('o')">All</button>
<% @sig_names.each do |sig_name| %>
<button class="btn" onclick="filterSelection('<%= sig_name %>')"><%= sig_name %><br></button>
<% end %>
</div>
此外,您还可以在代码中使用for循环,效果很好,对ruby来说不是很惯用。 .each
还有更多。
答案 1 :(得分:1)
<% if o.sigs.exists? %>
<div id="myBtnContainer">
<button class="btn active" onclick="filterSelection('o')">All</button>
<% o.sigs.pluck(:name).uniq.each do |name| %>
<button class="btn" onclick="filterSelection('<%= name %>')"><%= name %><br></button>
<% end %>
这是我的问题的答案,方法是添加此pluck(:name).uniq