Rails路由类别按名称查找

时间:2013-05-12 15:56:10

标签: ruby-on-rails routing find categories params

我希望我的用户能够查看/分类/喜剧/并查看喜剧类别中的所有帖子。问题是在我的数据库中所有类别都有资本,所以喜剧就是喜剧。这意味着/类别/喜剧/工作和/类别/喜剧/没有。我知道这似乎不是什么大问题,但从尽可能方便用户的角度来看。

def show
    if @category = Category.find_by_name.(params[:id])
        @stories = @category.stories
    else
        redirect_to categories_path
        flash[:error] = "There is no such category"
    end
end

这是我控制器中的代码。我想我可能不得不在第一个字母大写,但由于我是Rails的新手,我完全不知道如何实现这一点。

感谢您阅读本文,希望感谢您的帮助! 垫

1 个答案:

答案 0 :(得分:1)

如果类别名称中的所有单词的首字母大写,请使用titleize

Category.find_by_name(params[:id].titleize)

否则,请使用humanize

Category.find_by_name(params[:id].humanize)

您选择哪一个只对多字类别名称有用 - titleize会使所有单词的第一个字母为大写,humanize会使第一个单词的第一个字母为大写。

humanize还有从字符串中删除尾随_id的副作用 - 在您的情况下可能不会出现问题。

我还应该提到数据库比较通常不区分大小写,因此对于非参数化字符串,这可能不是必需的。当您parameterize路径路径时,它变得更加必要,在这种情况下,多个单词将成为连字符分隔符。