以下是导致错误的原因示例:
ruby-1.9.2-p290 :004 > Post.new(title: "new").save!
(0.3ms) BEGIN
post Load (0.3ms) SELECT `posts`.* FROM `posts` WHERE (`slug` = 'new' OR `slug` LIKE 'new--%') ORDER BY LENGTH(`slug`) DESC, `slug` DESC LIMIT 1
(0.3ms) SELECT 1 FROM `posts` WHERE `posts`.`lsi_post_id` = BINARY '' LIMIT 1
(0.1ms) ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Friendly is reserved
我想在Post模型中添加一些可能用“ - ”替换一个新单词或者其他内容的东西,但我不知道从哪里开始。
谢谢!
答案 0 :(得分:3)
使用 daemonsy 和 SizzlePants 的答案,我想出了这个,它将“new”重新命名为“new2”,将“edit”重命名为“edit2”,像以前一样保留其他所有内容:
class Page < ActiveRecord::Base
extend FriendlyId
friendly_id :friendly_id_title, use: :slugged
def friendly_id_title
case title.parameterize
when 'new' then 'new2'
when 'edit' then 'edit2'
else title
end
end
end
答案 1 :(得分:0)
我刚才注意到这是一个老问题。非常想知道你是如何解决这个问题的。
7个RESTFul关键字被友好作为slug选项阻止。这里的罪犯是new
。
从您的代码中,您似乎正在尝试将slug设置为“new”,因为它是您帖子的标题。
为了防止使用保留字,可以使团长生成器使用方法而不是列。
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :name_and_id, :use=>:slugged # Used slugged mode, need a slug column in db.
def name_and_id
"#{id}-#{name}"
end
end
从此示例代码中,在创建名为my post
的帖子时,转到localhost:3000/posts/1-my-post
即可。 -
分隔符会自动添加,可以更改。
有关详细信息,请参阅Friendly Id Guide.rdoc。
答案 2 :(得分:0)
这就是我解决问题的方法..我真的不确定它是对还是错......但我现在正在使用它。真的很想听到其他建议。
我的应用程序助手看起来像这样:
module ApplicationHelper
# Friendly_Id reserved words
def niceify_slug(s)
clean_slug = s
reserved_words = ["new", "edit"]
reserved_words.each { |word| clean_slug = clean_slug.gsub(/\b#{word}\b/i, "#{word}_") }
return clean_slug
end
end
我的模型看起来像这样:
class MyModel < ActiveRecord::Base
include ApplicationHelper
# Slugs via FriendlyId
extend FriendlyId
friendly_id :niceified_name, :use => :slugged
def niceified_name
niceify_slug(self.name)
end
end