我在users表中有resources :users
和custom_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。