我有这个代码将一个表与另一个表相关联。使用Set它会收集所有数据,只有在有其他相似值时才会显示一次。
genre_names = Set.new
<% @pm_relationships = PmRelationship.where(:people_id => @person.id) %>
<% @pm_relationships.each do |pm_relationship| %>
<% @movie=Movie.find(pm_relationship.movie_id) %>
<% @mg_relationships = MgRelationship.where(:movie_id => @movie.id) %>
<% @mg_relationships.each do |mg_relationship| %>
<% @genre=Genre.find(mg_relationship.genre_id) %>
<% genre_names.add(@genre.name) %>
<% end %>
<% end%>
# actual view code
<ul class="basic-info-genres">
<%= "<li>#{genre_names.to_a.join('</li><li>')}</li>".html_safe %>
</ul>
我的问题是link_to如何在提供的打印代码中起作用
<%= "<a><li><button><span>#{genre_names.to_a.join('</span></button></li></a><a><li><button><span>')}</span></button></li></a>".html_safe %>
如何使上述打印链接到/genres/<%=@genre.id%>
?
我已经尝试了
<%= "<a href='/genres/#{@genre.id}'><li><button><span>#{genre_names.to_a.join('</span></button></li></a><a><li><button><span>')}</span></button></li></a>".html_safe %>
但这只链接到第一个显示的类型
有什么想法吗?
由于
答案 0 :(得分:1)
添加整个@genres的流派,不仅仅是@ genre-name,那么你可以在视图代码中使用每个循环。
对于Controller(你应该有你的程序逻辑):
@genres = Set.new
@pm_relationships = PmRelationship.where(:people_id => @person.id)
@pm_relationships.each do |pm_relationship|
movie=Movie.find(pm_relationship.movie_id)
@mg_relationships = MgRelationship.where(:movie_id => movie.id)
@mg_relationships.each do |mg_relationship| %>
genre=Genre.find(mg_relationship.genre_id) %>
@genres.add(genre) %>
end
end
对于视图:
<ul class="basic-info-genres">
<% @genres.each do |genre| %>
<li><%= link_to genre.genre_name, "#{root_url}genres/#{genre.id}" %></li>
<% end %>
</ul>
答案 1 :(得分:0)
如果我理解正确,您想要链接与电影相关的所有类型。
要执行此操作,请在控制器中加载用户电影的流派。使用正确的关联设置,这就像@person.genres
一样简单。所以,让我们这样做。
class Person < ActiveRecord::Base
has_many :pm_relationships
has_many :movies, through: :pm_relationships
has_many :genres, through: :movies
end
class PmRelationship < ActiveRecord::Base
belongs_to :person
belongs_to :movie
end
class Movie < ActiveRecord::Base
has_many :mg_relationships
has_many :genres, through: :mg_relationships
end
使用该设置,在您的控制器中,只需设置一个实例变量来列出@person
的所有类型
@genres = @person.genres
然后在您的视图中,使用link_to
的阻止形式,以便更轻松地对您的HTML进行编码
<ul class="basic-info-genres">
<% @genres.each do |genre| %>
<%= link_to genre do %>
<li>
<button>
<span><%= genre.name %></span>
</button>
</li>
<% end %>
<% end %>
</ul>
答案 2 :(得分:0)
基本上,您不能在li
内拥有任何直接的子元素,而不是ul
。您需要在<a>
内li
,但是,我们可以将css应用于<a>
,以便它看起来像整个&#39; li&#39;有可点击的链接。
从实际代码中,更新代码段。
<ul class="basic-info-genres">
<% genre_names.each do |genre_name| %>
<li>
<%= link_to genre_name, genre_path(@genre), :class => 'clickable-li' %>
</li>
<% end %>
</ul>
您需要将<a>
设置为display: block;
# css file
.clickable-li {
display: block;
}