Rails to_param - 没有ID

时间:2014-02-14 10:07:19

标签: ruby-on-rails ruby-on-rails-3

我想创建参数/users/will-smith,所以这是我的代码:

def to_param
  "#{full_name.parameterize}"
end

参数化会将“Will Smith”转换为“will-smith”

所以在控制器中,param与find语句不匹配,因此返回nil

# User with full_name "will-smith" not found
@user = User.find_by_full_name(params[:id])

我发现的大部分解决方案都是将参数更改为#{id}-#{full_name.parameterize}。但我不希望URL包含ID。

其他解决方案是在数据库中添加permalink列,我不太喜欢。

还有其他解决方案吗?

由于

1 个答案:

答案 0 :(得分:2)

这是一个名为FriendlyId的宝石。它会为您提供更多选择。

您的代码存在的问题是您需要将该参数转换回原始参数,或者在搜索过程中对列使用相同类型的转换。 FriendlyId,基本上可以帮助你达到同样的效果。

另外,我不确定,但你可能会错过gist。它包含有关该主题的大量信息。