我有一个rails应用程序,其中包含拥有“项目”的Devise创建的用户。这些项目有显示视图,我希望这些节目视图有更多的SEO友好的URL。我看了实现了Friendly_Id gem的railscast,但是当我去创建一个新的'item'时,它给了我这个错误:
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
答案 0 :(得分:2)
我有同样的问题。我尝试了:require => 'friendly_id'
以及服务器重启。它似乎解决了这个问题。
感谢@StuartM和@fmendez
答案 1 :(得分: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:save
执行touch tmp/restart.txt
以重新启动Web服务器。
更新:刚刚在我的生产网站上运行了这个。我必须使用rake posts:save RAILS_ENV=production
否则rake引发了一个异常,它无法找到数据库适配器。
答案 2 :(得分:0)
这是有用的:
迁移数据库以在项目中包含Slugs,INDEXED 运行迁移 Rails控制台:Item.find_each(&amp;:save)
然后推到Heroku并做了同样的事情。工作