替代 :id 参数
Alternative for :id param
我有 resources :users
和 custom_id
内部用户 table。
我想使用 link_to "user", user
方法选择 custom_id
来为 link 提供此字段作为参数。
我的show
里面的动作users_controller.rb:
...
@user = User.find(custom_id: params[:id])
...
更好的管理方法是通过 to_param
方法,您可以在模型中定义该方法。当您将模型实例传递给路径助手时,它会在其上调用此方法,默认情况下 returns 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 将在 params[:id]
.
中通过
您仍然需要确保通过控制器中的自定义 ID 字段而不是 ID 加载用户。一种常见的模式是将其放入控制器中的受保护方法中:
#in UsersController
protected
def load_user
@user = User.find(custom_id: params[:id])
end
现在你可以在加载@user的所有动作中说load_user
,或者将其放入相关动作的前置过滤器中,这甚至是DRYer。
在您的表格中您可以使用:
<%= link_to @user.name, @user %>
因为你已经在 UsersController 中写了:
...
@user = User.find(custom_id: params[:id])
...
我有 resources :users
和 custom_id
内部用户 table。
我想使用 link_to "user", user
方法选择 custom_id
来为 link 提供此字段作为参数。
我的show
里面的动作users_controller.rb:
...
@user = User.find(custom_id: params[:id])
...
更好的管理方法是通过 to_param
方法,您可以在模型中定义该方法。当您将模型实例传递给路径助手时,它会在其上调用此方法,默认情况下 returns 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 将在 params[:id]
.
您仍然需要确保通过控制器中的自定义 ID 字段而不是 ID 加载用户。一种常见的模式是将其放入控制器中的受保护方法中:
#in UsersController
protected
def load_user
@user = User.find(custom_id: params[:id])
end
现在你可以在加载@user的所有动作中说load_user
,或者将其放入相关动作的前置过滤器中,这甚至是DRYer。
在您的表格中您可以使用:
<%= link_to @user.name, @user %>
因为你已经在 UsersController 中写了:
...
@user = User.find(custom_id: params[:id])
...