2016-05-16 3 views
0

私はムービーとタグの間にn:mの関係があります。 (has_and_belongs_to_many)オブジェクトが他にも割り当てられているかどうかをチェックするRailsアプリケーションの

各タグを複数の映画に割り当てることができます。

ここで、新しいタグをムービーに追加するとき、このタグが既にこのムービーに割り当てられているかどうかをチェックします。

タグと映画の間にリレーションシップがあるかどうかを確認するためのレールで最もすばらしい方法は何ですか?これをフェッチすることができ

@tagfound = Tag.where("tagname = ?", data[:tagname]) 

映画のすべてのタグ一覧::

は私がして、タグをフェッチあなたは必要ないかもしれない

+0

注: '(タグ名:データ[:タグ名])は'これを表現するより簡潔な方法です。 – tadman

答えて

2

あなたの助けを

@vid.tags 

感謝をチェックする。あなたは、単にこの

movie.tags = [array, of, tags] 
movie.save # note, you don't need to save. The line above saves. 

または

movie.tag_ids = [1,2,3,4] 
movie.save # note, you don't need to save. The line above saves. 

行うことができますし、それはそれは新しいタグを設定すると、もはや接続されているものを取り除くの世話をします。チェックボックスUIまたはトークナイザに適しています。 、あなたはこの

tag.in?(movie.tags) 

を行うことができます。これは、単一の

movie.tags << tag unless tag.in?(movie.tags) 

を追加する方法である映画は、タグを持っている場合は見つけることが、あなたの質問に答えるために

[EDIT] の場合あなたはこの

movie.update_attributes(movie_params) 

を行うとのparamsの一つはtag_idsで、映画は新しいタグを保存します有効であれば(他のエラーはありません)。

+0

これはすてきな答えです。私はあなたが最後の行に書いた種類のコードのためにRubyとレールを愛しています:) – amulous

+0

物事について、@swards。私はレールコンソールでこれを試して、 'movie.tag_ids = [1,2,3,4]'という文は 'movie.save'を実行せずに結果をデータベースに保存しました。なぜそのような振る舞いですか? – amulous

+0

ええ、私にも驚きました。実際には、私はそれが問題だとは思わない。ムービーを保存していて最初に有効かどうかを確認するには、フォームparamsを使用して、 'update_attrbutes(movie_params)'ですべて更新します。ムービーにエラーがある場合、タグは保存されません。答えにこれを加えました... – Swards

0

私はこれを行うには2つの方法があると思います。

  1. チェック@tagfoundは、後にタグ&コールUNIQを追加

    @vid.tags.include? @tagfound

  2. vid.tags @に含まれている場合。

    @vid.tags << @tagfound @vid.tags.uniq!

関連する問題