gpt4 book ai didi

nested - 如何使用嵌套资源在 Rails 4 中创建与用户关联的对象?

转载 作者:行者123 更新时间:2023-12-02 03:42:10 25 4
gpt4 key购买 nike

使用 Rails 4,我尝试使用 form_for 创建一个对象并将其与用户正确关联。我将“菜单”资源嵌套在“用户”下,因为一个菜单属于一个用户,而一个用户有很多菜单。当用户提交新的菜单表单时,我希望菜单能够保存并与用户相关联。

你会怎么做?下面的代码有效,因为在 Controller 的创建方法中我明确地将新菜单铲到 current_user.menus 中,但它感觉像是一种解决方法。我一直在寻找答案,但一直找不到真正好的例子。

感谢您的帮助。另外,这是我的第一个 StackOverflow 问题,所以也请随时提出改进建议。

路线是这样的:

  resources :users do
resources :menus, shallow: true
end

Controller 看起来像这样:

  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

View 上的表单如下所示:

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

最佳答案

你喜欢这种风格吗?

def create
flash[:notice] = menu.valid? ? "Menu saved" : "Sorry, menu did not save. Please try again."

redirect_to user_menus_url
end

private

def menu_params
params.require(:menu).permit(:name)
end

# this is where the magic happens
def menu
Menu.where(user_id: current_user.id).create(menu_params)
end

关于nested - 如何使用嵌套资源在 Rails 4 中创建与用户关联的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com