2013-04-08 127 views
3

我有一个Raise应用程序,它拥有Devise创建的拥有'项目的用户。这些项目具有显示视图,我希望这些显示视图具有更多SEO友好的URL。我看到了Friendly_Id宝石railscast,实现,但是当我去创造一个新的“项目”,它给了我这个错误:Friendly_Id错误,未初始化的常量

uninitialized constant Item::FriendlyId 

当我尝试点击一个项目,它给了我这个错误:

undefined method `key?' for nil:NilClass 

我运行了一个软件包安装。宝石不在宝石资产中。

这里是我的项目模型:

1 class Item < ActiveRecord::Base             
2 # include Tire::Model::Search             
3 # include Tire::Model::Callbacks            
4                    
5 extend FriendlyId                
6 friendly_id :title, use: :slugged                       
7                     
8 attr_accessible :content, :user_id, :title, :price, :image      
9 validates :content, :length => { :maximum => 140 }        
10 belongs_to :user                
11 delegate :email, :city, :state, to: :user          
12                     
13 def self.search(search)              
14  if search                 
15  where('title ILIKE ? OR content ILIKE ?', "%#{search}%", "%#{search}%") 
16  else                   
17  scoped                  
18  end                   
19 end                   
20                     
21 def location                 
22  [city.to_s.camelcase, state.to_s.upcase].reject(&:blank?).join(", ")   
23 end                   
24                     
25 has_attached_file :image, styles: {           
26  thumb: '100x100>',               
27  square: '200x200#',               
28  medium: '300x300>',               
29  large: '600x600#'               
30 } 
31 end 

这里是我的用户模型:

1 class User < ActiveRecord::Base             
2 # Include default devise modules. Others available are:      
3 # :token_authenticatable, :confirmable,          
4 # :lockable, :timeoutable and :omniauthable         
5 devise :database_authenticatable, :registerable,        
6   :recoverable, :rememberable, :trackable, :validatable     
7                     
8 # Setup accessible (or protected) attributes for your model     
9 attr_accessible :email, :password, :password_confirmation, :remember_me, :username,   :city, :state, :phone 
10 has_many :items                
11                     
12 validates_presence_of :username            
13 validates_uniqueness_of :username            
14                     
15 def to_param                 
16  username                  
17 end                               
18                     
19 after_create :send_welcome_email            
20                     
21 private                  
22                     
23 def send_welcome_email               
24  UserMailer.welcome_email(self).deliver          
25 end                   
26                     
27 end  
+3

'bundle install'后你重启了你的rails服务器吗? – 2013-04-08 01:50:56

+1

尝试在gem文件中添加':require =>“friendly_id”'。例如:'gem“friendly_id”,:require =>“friendly_id”' – fmendez 2013-04-08 01:53:36

+0

想到不重新启动rails服务器。但我已经这样做了,所以我不认为这是问题。仔细观察之后,我发现它说它找不到'slu。'。我更多地阅读了文档,看起来我需要在我的数据库中有一个slug列。如果我有用户和项目显示页面,我想使其变得“友好”,是否需要向项目和用户表中添加slu and,然后我可以在每个模型中使用与上面相同的代码? – momchenr 2013-04-08 12:35:06

回答

0

这是什么工作:

DB迁移到包括项目蛞蝓,被索引 运行移植 Rails Console:Item.find_each(&:save)

然后推到Heroku并做同样的事情。工作。

2

我有同样的问题。我尝试了:require => 'friendly_id'以及作为服务器重启。它似乎已经解决了这个问题。

感谢@StuartM和@fmendez

+1

服务器重新启动为我工作 – 2016-10-08 04:33:03

2

我就遇到了这个问题为好。要解决我写了一个rake任务...

require 'rake' 
namespace :posts do 
    desc "Save all posts" 
    task :save => :environment do 
    puts "--- Saving posts ---" 
    Post.find_each(&:save) 
    puts "All posts have been saved.\n" 
    end 
end 

...执行从程序my_app /目录rake posts:savetouch tmp/restart.txt重新启动Web服务器。

更新:刚刚在我的制作网站上跑过这个。我必须使用rake posts:save RAILS_ENV=production,否则rake引发了一个异常,它找不到数据库适配器。

相关问题