替代方案:id param

时间:2015-06-25 11:11:21

标签: ruby-on-rails ruby models

我在用户表中有class ProductsDataPipeline(object): """ Item pipeline for products data crawler """ def process_item(self, item, spider): return item resources :users

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

users_controller.rb 中的custom_id次操作:

show

2 个答案:

答案 0 :(得分:0)

更好的方法是通过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将在params[:id]中出现。

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

#in UsersController
protected

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

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

答案 1 :(得分:0)

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

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

因为您已在UsersController中写过:

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