【问题标题】:Unable to change the parameter from id to a custom variable in Rails无法将参数从 id 更改为 Rails 中的自定义变量
【发布时间】:2013-12-03 22:30:01
【问题描述】:

我一直在绞尽脑汁试图找出一些应该非常简单的东西,所以我确信我只是忽略了一些东西,并且一组新的眼睛可能会很有用,因为我的所有代码似乎都模糊在一起。我正在尝试为允许用户创建类别然后根据这些类别发布相关故事的网站创建虚荣 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

Routes.rb

resources :categories

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

渲染页面时的终端读数

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

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

【问题讨论】:

    标签: ruby-on-rails parameters routes ruby-on-rails-4 vanity-url


    【解决方案1】:

    我还必须实现虚网址并遵循此blog post/tutorial

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

    class Category < ActiveRecord::Base
    
      def slug
        title.downcase.gsub(" ", "-")  
      end
    
      def to_param
        "#{slug}"
      end
    
    end
    

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

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

    希望对你有帮助

    【讨论】:

    • 工作得很好,我知道这是我忽略的东西,只是忘了添加 def to_param。谢谢!
    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多