【问题标题】:Rails route Category find by name issueRails 路线类别按名称查找问题
【发布时间】:2013-05-12 15:56:10
【问题描述】:

我希望我的用户能够查看 /categories/comedy/ 并查看喜剧类别中的所有帖子。问题是在我的数据库中,所有类别都带有大写字母,所以喜剧就是喜剧。这意味着 /categories/Comedy/ 确实有效,而 /categories/comedy/ 无效。我知道这似乎没什么大不了的,但从尽可能用户友好的角度来看,它是。

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 的新手,所以我完全不知道如何实现这一点。

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

【问题讨论】:

  • 你的喜剧大写​​是因为它的模特名字。请发布您的 routes.rb 以便我们可以帮助您解决问题。同样在Category.find_by_name.(params[:id]) 删除params 之前的点

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


【解决方案1】:

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

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

否则,使用humanize:

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

您选择哪个只对多词类别名称很重要 - titleize 将使所有单词的首字母大写,humanize 将使第一个单词的首字母大写。

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

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

【讨论】:

  • 哇,这么简单。我几乎感到内疚! Titleize 成功了。感谢您的快速回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多