RailsのModelでnew_or_findの様な処理を書きたい。企業口コミRailsのModelでnew_or_findの様な処理を書きたい。PV0現在、Rails4で開発しています。今回はタグをnewした場合に、もし既存のタグがあるならその既存のタグを返す。現在の状況と問題を説明させていただきます。現在ブログシステムを作っています。このブログにはタグをつける事が可能です。このタグの機能を実装するために、ブログとタグは多対多の関係にあります。このブログを作成するときなのですが、ブログのnew.html.erb内でブログの内容も、タグの登録も同時に行います。この機能を簡単に実現するためにaccepts_nested_attributes_forを使って、new一回でブログとタグを同時に登録できるようにしています。ブログのモデルと、コントローラのコードはこんな感じです。Blog.new(blog_params)##blog_paramsにはフォームからのブログデータとタグデータが返ってくる。endendまたタグのmigrateファイルはこれです。endend問題点ただここでこまったことがあります。それは、newをする際に同じ名前のタグを登録できてしまうということです。"hello"というタグが既にDBにある状態で、フォームから"hello"というタグを登録しても、新しい"hello"というタグがnewされてしまうのです。true"なので、saveするときには例外が発生するのですが、それはそれで処理に困ります。質問内容なので理想としては、Blog.new(blog_params)した段階で、既に"hello"というタグがあればそのインスタンスを返す。しないなら、新しくnewをする。いうような処理を書きたいのですが、どのように書けばいいか分かりません。そこで質問なのですがどのようにすればこの問題が解決できるでしょうか?またnew_or_findと書いていますが、この方法以外でも解決方法があればご教授いただけると幸いです。更新順1以下のどれかでうまくゆかないでしょうか。(4)お返事ありがとうございます。オーバーライドする方法でうまくいきました。ご回答ありがとうございました。16:37あ、そうですか。使っていて、つい先程良さそうな資料を見つけました。使うと良さそうにも思えました。16:39リンクありがとうございます。自分も1つ目のリンクの方法で投稿フォームは作りました。jsかかなくていいので便利ですよね。reject_ifというのがあったんですね。Recordにfind_or_initialize_byというのがありますよ。http://guides.rubyonrails.org/active_record_querying.html#find-or-initialize-byDBに保存まで一気に行う場合はfind_or_create_by!が使えます。(0)お返事ありがとうございます。実はfind_or_initialize_byも検討したのですが、accepts_nested_attributes_forの場合はどうやって使えばいいのか分からず断念していました。14:57すみません。accepts_nested_attributes_forというのをよく知らず、ピントがずれた回答をしてしまいました。ぐぐってみたところ、以下のブログ記事が参考になりそうです。parametersを使う場合の例はこちらで解説されていました。00:07色々調べていただいてありがとうございます、助かります。リンク等も見てみた結果、特定の物は更新させたいという様な処理を書きたい場合、newに入れるhashを事前に変更してidを割り振るか、new自体を書き換えるという二択でしょうか?どちらを使うかは色々考えた方が良さそうですね。ありがとうございます。17:51ウォッチこの質問への回答やコメントをメールでお知らせします。