2017-04-19 19 views
0

私は2つのオブジェクト:saleorganizationを作成する必要があるフォームを持っています。これはsales_controllerの内部で発生します。簡潔にするために2つのオブジェクトを1つのコントローラ内に作成する方法は、Railsでコントローラメソッドを作成しますか?

は、モデルとその属性は次のとおりです。

sale 
    amount (integer) 
    organization_id (uuid) 

organization 
    name (string) 

sale belongs_to organization 
organization has_many sales 
sales newがどのように見えるかです

Sales Form

。ユーザーに入力する販売に関する入力があり、ユーザーが入力する組織名の入力もあります。提出すると、ユーザーは新しい販売を作成します(さらに、その販売に関連付けられた新しい組織を作成しました)。

createメソッドのベストプラクティスをsales_controller内で把握しようとしています。

def create 
    @sale = Sale.new(sale_params) #assume sale_params permits organization_id and amount 
    @organization = Organization.create(params[:name]) 
    #@sale.organization_id = @organization.id 
    if @sale.save 
     render json: @sale 
    else 
     render json: sale, status: :unprocessable_entity 
    end 
    end 

@organization = Organization.create(...)が正しく感じられません。複数のオブジェクトを "Rails"のように提出する方法はありますか?

@organization = Organization.find_or_create_by(name: params[:name])

、その後sale.organization_idを関連付けることにより継続:あなたはすでにあなたが使用することができ、以前の販売に組織を作成している場合がありますので

+0

古い記事ですが、以下が役立ちます:https://webuild.envato.com/blog/creating-form-objects-with-activemodel-and-virtus/ 実際にはVirtusは必要ありませんが、記事はバリデーションなどを包む要点を与える – dmcnally

答えて

1

。 Organization.nameにも一意制約が必要です。

関連する問題