Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails:FriendlyId宝石不工作_Ruby On Rails 3_Rubygems_Friendly Url_Friendly Id - Fatal编程技术网

Ruby on rails 3 Rails:FriendlyId宝石不工作

Ruby on rails 3 Rails:FriendlyId宝石不工作,ruby-on-rails-3,rubygems,friendly-url,friendly-id,Ruby On Rails 3,Rubygems,Friendly Url,Friendly Id,我正在尝试安装gem FriendlyId。我正在关注railscast:314个带有friendlyid的漂亮URL。安装起来似乎很容易。但不是为我工作 以下是我所做的步骤: added gem "friendly_id", "~> 4.0.9" in Gemfile 然后我运行bundle安装命令 然后将我的产品模型修改为: class Product < ActiveRecord::Base extend FriendlyId friendly_id :name

我正在尝试安装gem FriendlyId。我正在关注railscast:314个带有friendlyid的漂亮URL。安装起来似乎很容易。但不是为我工作

以下是我所做的步骤:

added gem "friendly_id", "~> 4.0.9" in Gemfile
然后我运行bundle安装命令

然后将我的产品模型修改为:

class Product < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name

  attr_accessible :name, :product_code, :recipe, :selling_price, :servings,   letsrate_rateable "quality", "packaging", "hygiene" , "service", "price"
  validates :name, :presence => true
  class << self
    def search(params)
             if params[:search]
                products = Product.published.includes(:product_sub_categories)
             end
    end
  end
 end
根据railscasts,应显示产品名称。但事实并非如此。我单独安装gem,但没有效果


有人能告诉我遗漏了什么吗?

不确定为什么指南中没有提到这一点,但请尝试:

alias_attribute :to_param, :slug
这是因为to_param方法允许自定义URL的id部分。在这里,您将该部分分配给友好的id生成的URL

另一个解决方案 我不确定这是否在friendly_id中实现,但我做到了:

class Product < ActiveRecord::Base
  def self.find(id_or_slug)
    case id_or_slug
    when String
      find_by_slug id_or_slug
    else
      super id_or_slug
    end
  end
end
class Product < ActiveRecord::Base
  def self.find(id_or_slug)
    case id_or_slug
    when String
      find_by_slug id_or_slug
    else
      super id_or_slug
    end
  end
end