3

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 %>
4

2 に答える 2