0

我一直在绞尽脑汁试图找出一些应该非常简单的东西,所以我确信我只是忽略了一些东西,并且一组新的眼睛可能很有用,因为我的所有代码似乎都模糊在一起。我正在尝试为允许用户创建类别然后根据这些类别发布相关故事的网站创建虚 URL。因此,例如,我希望用户访问 /categories/movies 以查看电影部分。如果我将其设置为使用类别 ID /categories/1,则它没有问题。无论出于何种原因,rails 一直尝试使用 id 参数而不是 title 参数来查找类别。我正在使用 Ruby 2.0.0 和 Rails 4.0。我已经读到“find_by”方法很快就会被弃用,所以如果有更好的方法来处理这个问题,那简直太好了。以下是相关代码:

类别控制器

def show
 @categories = Category.find_by_title(params[:title])
 @category = Category.find_by_title(params[:title])
 @posts = Post.where(category: set_category).all
end

路由.rb

resources :categories

get "/categories/:title" => "categories#show"

渲染页面时的终端读数

Processing by CategoriesController#show as HTML
Parameters: {"id"=>"Movies"}

重申一下,参数应该是 {"title"=>"Movies"} 而不是 id。就像我说的,我确信这是我忽略的非常简单的事情。任何帮助,将不胜感激。谢谢。

4

1 回答 1

1

我还必须实施虚荣网址并遵循此博客文章/教程

您几乎可以使用 vanity-url 在模型中创建一个 slug,所以

class Category < ActiveRecord::Base

  def slug
    title.downcase.gsub(" ", "-")  
  end

  def to_param
    "#{slug}"
  end

end

您在控制器中的显示操作将使用该find_by_slug方法

我认为有一个宝石也可以做到这一点,称为friendly_id,这里是一个railscast,但我没有亲自使用它

希望这可以帮助

于 2013-11-20T06:37:57.630 回答