Techioz Blog

Rails のベスト プラクティス : モデル内での関連オブジェクトの作成

概要

基本的に、ユーザー (電子メール、パスワード)、連絡先 (名前、電話番号)、関係 (user_id、contact_id、レベル) の 3 つのテーブルがあります。

ユーザーが新しい連絡先を作成したときに、その連絡先をそれに関連付けたいと考えています。協会の「友好度」のレベルは1~3まであります。

フォームを使用して contacts#create コントローラーにレベルを入力します。

今のところ、私はこれを持っていますが、これはうまく機能します

  def create
    @contact = Contact.new(params[:contact])
    if @contact.save
      #@relation = Relation.new(:user_id => current_user.id, :contact_id => @contact.id, :level => params[:relation])
      #@relation.save
      redirect_to root_url, :notice => "ok!"
    else
      render "new"
    end
  end

私はリレーション作成を連絡先モデルに移動して次のようなことをしようと考えていました。

  after_create { Relation.create(user_id: current_user.id, contact_id: self.id, level: params[:relation]) }

もちろん、これは機能しませんが、アイデアはわかります。 モデルでそれを行うのは良いことですか、それとも今のところそのままにしておいてもいいですか?

乾杯

解決策

このようなもの?基本的には、current_user に関連付けられた関係と連絡先をすべて 1 つに作成するだけです。

current_user.relations.create(contact: Contact.new(params[:contact]), level: params[:relation])

これを after_create に移動しないでください。どちらかというと、ユーザー、連絡先、リレーションを受け入れる関数をどこかに作成してください。