gpt4 book ai didi

mysql - rails : select related active records on join table

转载 作者:行者123 更新时间:2023-11-29 17:56:55 26 4
gpt4 key购买 nike

我有两个模型 Magazine.rbKeyword.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。我的 Controller 操作如下:

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 %>

但是我显示了所有关键字。如何才能只获取相关条目?

更新

在同一 View 中,我可以通过以下方式显示与给定关键字相关的所有杂志:

Related Magazines
<% @keyword.magazines.each do |s| %>
<div>
<a href='/magazines/<%= s.id %>')>
<div>Magazin <%= s.number %></div>
</a>
</div>
<% end %>

最佳答案

如果您只想获取相关关键字,请尝试使用以下查询:

@keywords = Keyword.joins(magazines: :keywords).where('keywords_magazines_join.keyword_id': @keyword.id).uniq.order(:word)

keywords_magazines_join 是 Rails 在该表的第一个 INNER JOIN 之后为 magazines_keywords 表生成的别名。

关于mysql - rails : select related active records on join table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48729238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com