私は2つのオブジェクト:sale
とorganization
を作成する必要があるフォームを持っています。これはsales_controller
の内部で発生します。簡潔にするために2つのオブジェクトを1つのコントローラ内に作成する方法は、Railsでコントローラメソッドを作成しますか?
は、モデルとその属性は次のとおりです。
sale
amount (integer)
organization_id (uuid)
organization
name (string)
sale belongs_to organization
organization has_many sales
sales new
がどのように見えるかです
。ユーザーに入力する販売に関する入力があり、ユーザーが入力する組織名の入力もあります。提出すると、ユーザーは新しい販売を作成します(さらに、その販売に関連付けられた新しい組織を作成しました)。
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を関連付けることにより継続:あなたはすでにあなたが使用することができ、以前の販売に組織を作成している場合がありますので
古い記事ですが、以下が役立ちます:https://webuild.envato.com/blog/creating-form-objects-with-activemodel-and-virtus/ 実際にはVirtusは必要ありませんが、記事はバリデーションなどを包む要点を与える – dmcnally