すべての記事の在庫を定義しようとしていますが、パラメーターで送信された記事を除外したいと考えています。
関係は次のようになります。
Article
has_many :tags, through: :articletags
ArticleTags
belongs_to :article
belongs_to :tags
Tags
has_many :article, through: articletags
私のモデルでタグのないものを定義する方法は次のとおりです。
def self.by_not_tags(tag)
joins(:tags).where('tags.title != ?', tag)
end
これが私の見解でそれを呼び出す方法です:
<%= link_to (tag.title), articles_path(:scope => tag.title) %>
これが私のコントローラーです:
def custom
if params[:scope].nil?
@articles = Article.all(:order => 'created_at DESC')
else
@articles = Article.by_tags(params[:scope])
@articles2 = Article.by_not_tags(params[:scope])
end
end
目標は、最初にタグ付きのすべての記事を表示し、次にそのタグのない他の記事を表示することです。そのため、重複はありません。
私の問題は結合にありますが、タグのない記事を見つける方法がわかりません。例外が機能する可能性がありますが、どのようなクエリが機能するかはわかりません。