Rails资源有新的参数;更新form_for

时间:2014-12-17 04:25:12

标签: ruby-on-rails ruby-on-rails-4

我更改了config/routes.rb,以便资源使用不同的参数

resources :users, param: :username

而不是users/:idusers/:id/edit等 我现在使用users/:usernameusers/: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网址?

1 个答案:

答案 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将负责其余部分。

相关问题