Rails 4 を使用して、form_for を使用してオブジェクトを作成し、それをユーザーに正しく関連付けようとしています。メニューはユーザーに属し、ユーザーは多くのメニューを持っているため、「メニュー」リソースを「ユーザー」の下にネストしました。ユーザーが新しいメニュー フォームを送信すると、メニューが保存され、ユーザーに関連付けられるようになります。
どうやってそれをしますか?以下のコードは機能します。これは、コントローラーの create メソッドで、新しいメニューを current_user.menus に明示的にシャベルするためですが、回避策のように感じます。私は答えを探していましたが、本当に良い例を見つけることができませんでした.
助けてくれてありがとう。また、これは私の最初の StackOverflow の質問なので、改善方法を提案してください。
ルートは次のようになります。
resources :users do
resources :menus, shallow: true
end
コントローラーは次のようになります。
def new
@menu = Menu.new
end
def create
@menu = Menu.new(menu_params)
current_user.menus << @menu
if @menu.save
flash[:notice] = "Menu saved"
else
flash[:notice] = "Sorry, menu did not save. Please try again."
end
redirect_to user_menus_url
end
private
def menu_params
params.require(:menu).permit(:name)
end
ビュー上のフォームは次のようになります。
<%= form_for @menu, url: user_menus_path(current_user), html: {method: "post", class: "menu_form"} do |f| %>
<%= f.text_field :name %>
...
<%= f.submit "Create" %>
<% end %>