ruby on rails - Alternative for :id param



我在users表中有resources :userscustom_id

我想使用link_to "user", user方法选择custom_id来提供这个字段作为参数的链接。

users_controller.rb:中我的show操作

...
  @user = User.find(custom_id: params[:id])
...

在您的表单中,您可以使用:

<%= link_to @user.name, @user %>

因为你已经在UsersController:中写过了

...
  @user = User.find(custom_id: params[:id])
...

更好的管理方法是通过to_param方法,您可以在模型中定义该方法。当您将模型实例传递给路径助手时,它会对其调用此方法,默认情况下该方法会返回id。您可以重写它以使用custom_id

#in User class
def to_param
  self.custom_id
end

现在你可以说

link_to "user", user_path(@user)

它将生成类似于的html

<a href="/users/<@user.custom_id>">user</a>

因此@user.custom_id将通过CCD_ 8。

您仍然需要确保通过控制器中的自定义id字段而不是id来加载用户。一种常见的模式是将其放入控制器中的受保护方法中:

#in UsersController
protected
def load_user
  @user = User.find(custom_id: params[:id])
end

现在,您可以在加载@user的所有操作中说load_user,或者将其放入相关操作的before过滤器中,甚至是DRYer。

最新更新