我有两个模型Magazine.rb
和Keyword.rb
,两者都通过一个简单的连接表相关联。一个杂志由许多关键词定义,关键词可以定义许多杂志。
class Keyword < ActiveRecord::Base
attr_accessible :word
has_and_belongs_to_many :magazines, :join_table => "magazines_keywords"
end
class Magazine < ActiveRecord::Base
has_and_belongs_to_many :keywords, :join_table => "magazines_keywords"
end
现在,我想通过杂志或几本杂志在ingredients/show.html.erb
上显示与给定关键字相关的所有关键字,这将是在联接表上共享相同magazine_id的所有其他关键字。我的控制器操作如下:
class IngredientsController < ApplicationController
def show
@keyword = Keyword.find(params[:id])
@keywords = Keyword.find(:all, :order => 'word ASC')
@k = Keyword.count
end
我目前在我看来:
Related Keywords
<% i= @k
for keyword in @keywords %>
<a href="/ingredients/<%= keyword.id %>">
<div class="keyword">
<%= keyword.word %>
</div>
</a>
<% i -= 1
end %>
但我会显示所有关键字。如何才能获得相关条目?
更新
在同一视图中,我可以通过以下方式显示与给定关键字相关的所有杂志:
Related Magazines
<% @keyword.magazines.each do |s| %>
<div>
<a href='/magazines/<%= s.id %>')>
<div>Magazin <%= s.number %></div>
</a>
</div>
<% end %>
答案 0 :(得分:0)
如果您只想获得相关的关键字,请尝试使用以下查询:
@keywords = Keyword.joins(magazines: :keywords).where('keywords_magazines_join.keyword_id': @keyword.id).uniq.order(:word)
keywords_magazines_join
是Rails为此表的第一个INNER JOIN
之后的magazines_keywords表生成的别名。