私は前にこれに非常によく似たことをしました。この質問をチェックしてください fields_for ブロックを条件付きにする
これには 2 つの方法があります。1 つは迅速で汚いもので、もう 1 つはレールを最大限に活用します。
方法 1
最初にモデルで、accepts_nested_attributes_for :businesses
次にコントローラーで次のようなものがあることを確認してください
params[:user][:businesses] = [ params[:business] ]
方法 2
代わりにやりたいことの 1 つは、モデルを有利に使用することです。ビューでfields_for
ブロックを使用すると、モデルのセットアップ方法から推測できるリレーションを指定できます。
それでもaccepts_nested_attributes_for :businesses
、モデルにあることを確認してください
コントローラーで、いくつかの変更を加える必要があります。
def new
resource = build_resource({})
resource.businesses.build # Inserts a blank object for business
respond_with resource
end
追加したコードのビットを削除できるため、作成アクションでは何も触れないでください。
ビューでは、ビジネス フォームと登録フォームが表示されます。のようなものを追加します。
<% form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
# some user form stuff
<%= f.fields_for :business do |i| %>
<%= render "/users/registrations/business", :form => i %>
<% end %>
<% end %>
保存時に、コントローラーは、ビジネスをユーザーに自動的に追加していることを認識する必要があります。
実際の書式設定と命名をいじる必要があるかもしれませんが、Rails でフォームを送信すると、操作が非常に簡単になります。また、コントローラーを美しく薄く保つというイデオロギーにも対応しています。