我更改了config/routes.rb
,以便资源使用不同的参数
resources :users, param: :username
而不是users/:id
,users/:id/edit
等
我现在使用users/:username
,users/:username/edit
等
然后在我的UserController中,我像这样填充@user
@user = User.find_by_username(params[:username])
在大多数情况下,一切都运行良好,我有更有意义的网址。
问题是我有一个非常复杂的形式部分,我不想分成两种不同的形式(我仍然想使用部分)
但是现在这个:
form_for @user do |f|
....
它路由到各自的更新操作,但它替换了:@user用户名的用户名,有效地导致我找不到使用@user = User.find_by_username(params[:username])
进行更新操作的用户。我可以包含form_for @user, params: {username: @user.username} do |f|
,但除非填充了@user,否则这将不起作用。
我如何让我的form_for分别路由到我的更新并创建操作,同时从我的资源中保留我的/users/:username
网址?
答案 0 :(得分:0)
您可以使用url_helpers帮助您创建将路由到相应操作的网址
form_for @user, url: {action: (@user.new_record? ? "create" : "update") } do |f|
因此,它将是
如果url: {action: "create"}
是新记录,则 @user
或
如果url: {action: "update"}
不是新记录,则 @user
Rails将负责其余部分。