使用 Rails 4,我正在尝试使用 form_for 创建一个对象并将其与用户正确关联。我在“用户”下嵌套了“菜单”资源,因为一个菜单属于一个用户,而一个用户拥有多个菜单。当用户提交新的菜单表单时,我希望保存菜单并将其与用户关联。
你会怎么做?下面的代码有效,因为在控制器的创建方法中,我明确地将新菜单铲到 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 %>