2013-04-08 2 views
3

У меня есть приложение rails, у которого есть созданные пользователем Devise, которые владеют «элементами». Эти элементы имеют показы просмотра, и я хотел, чтобы эти шоу отображали больше URL-адресов, ориентированных на SEO. Я наблюдал railscast для Friendly_Id камня, реализован, но когда я иду, чтобы создать новый «предмет», он дает мне эту ошибку:Friendly_Id error, unintialized constant

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'? –

+1

Попробуйте добавить ': require =>" friendly_id "в файл gem. Например: 'gem" friendly_id ",: require =>" friendly_id "' – fmendez

+0

Хорошая мысль о том, что перезапуск сервера рельсов не рекомендуется. Но я это сделал, поэтому я не думаю, что это проблема. Посмотрев поближе, я обнаружил, что он сказал, что не может найти «пули». Я больше читаю о документации, и мне кажется, что мне нужно иметь столбцы slugs в моей базе данных. Если у меня есть страницы с показами пользователей и товаров, которые я хочу сделать «дружественными», мне нужно добавить пули к обоим элементам и таблицам пользователей, а затем я могу использовать один и тот же код в каждой модели, как указано выше? – momchenr

ответ

0

Это то, что работает:

Migrate DB включить Слизняки по пунктам, индексированные Run Миграция Консоль Rails: Item.find_each (&: сохранить)

Затем толкнул в Хероку и сделал то же самое. Работал.

2

У меня была та же проблема. Я попробовал :require => 'friendly_id', а также перезапустил сервер. Кажется, что проблема была решена.

Благодаря @StuartM и @fmendez

+1

Перезагрузка сервера работала для меня –

2

Я столкнулся с этой проблемой, а также. Для решения я написал задачу грабли ...

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 

... rake posts:save выполнен из my_app/каталога и touch tmp/restart.txt перезапустить веб-сервер.

Обновление: Просто запустил это на моем производственном сайте. Я должен использовать rake posts:save RAILS_ENV=production, иначе рейк поднял исключение, что он не смог найти адаптер базы данных.

Смежные вопросы