我想创建参数/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
列,我不太喜欢。
还有其他解决方案吗?
由于
答案 0 :(得分:2)
这是一个名为FriendlyId的宝石。它会为您提供更多选择。
您的代码存在的问题是您需要将该参数转换回原始参数,或者在搜索过程中对列使用相同类型的转换。 FriendlyId,基本上可以帮助你达到同样的效果。
另外,我不确定,但你可能会错过gist。它包含有关该主题的大量信息。