2016-11-14 6 views
0

私は内部結合を行っています(少なくともコードが行っていると思いますが)私の検索は同じ結果を何度も返しています。私は私の参加に何か問題があると思う。Rails Searchは重複を返します

タグ

+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| name  | varchar(255) | YES |  | NULL |    | 
| color  | varchar(255) | YES |  | NULL |    | 
| article_id | int(11)  | YES | MUL | NULL |    | 
| created_at | datetime  | NO |  | NULL |    | 
| updated_at | datetime  | NO |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

記事

+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| title  | varchar(255) | YES |  | NULL |    | 
| info  | text   | YES |  | NULL |    | 
| created_at | datetime  | NO |  | NULL |    | 
| updated_at | datetime  | NO |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

私がタグ付けされている各記事と、それはタグに基づいて複数の結果を返します。したがって、記事に3つのタグがある場合、3つのレコードが返されます。各記事に返されるのは1つだけであるべきですが?

class Article < ApplicationRecord 
    has_many :tags, dependent: :destroy 
    validates :title, presence: true 

    def self.search(search) 
    if search 
    joins(:tags).where('title LIKE :search OR tags.name LIKE :search', search: "%#{search}%") 
    else 
    all 
    end 
end 
end 

答えて

1

.distinctまたは.groupを使用します。レール4.0.2から始まる.uniqエイリアスもあります。

例:

joins(:tags).where('title LIKE :search OR tags.name LIKE :search', search: "%#{search}%").distinct 

joins(:tags).where('title LIKE :search OR tags.name LIKE :search', search: "%#{search}%"). 
group('article_id') 
+0

すごい...私は別々の前に置いて、何のどこを得ていませんでした。あなたは最高です。 :D – trowse

関連する問題