Friendly_Id и зарезервированные слова - Как я могу заменить зарезервированное слово? - PullRequest
5 голосов
/ 05 ноября 2011

Вот пример того, что вызывает ошибку:

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 что-то, что, возможно, заменяет новое слово на «-», или что-то в том же духе, но яЯ не уверен, с чего начать.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 07 апреля 2012

Используя ответы 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
0 голосов
/ 22 февраля 2012

Вот как я обошел все вокруг ... Я действительно не уверен, правильно это или неправильно ... но я использую это сейчас.Очень хотелось бы услышать другие предложения.

Помощник моего приложения выглядит примерно так:

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
0 голосов
/ 20 февраля 2012

Я только что заметил, что это старый вопрос.Очень бы хотелось узнать, как вы решили проблему тоже.

7 ключевых слов RESTFul заблокированы Friendly как выбор слаг.Нарушитель здесь 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 .

...