2013-05-01 2 views
0

В настоящее время я использую драгоценный камень friendly_id в рельсах и заметил, что если кто-то называет сообщение «О», он перезаписывает путь/about, который я назначил статической странице на моих маршрутах.rb файл.friendly_id и routes.rb - rails

Это мой текущий код:

extend FriendlyId 
    friendly_id :title, use: :history 

Если есть предыдущие сообщения с тем же именем ... это добавляет --2. Но friendly_id, кажется, игнорирует статические маршруты на моих маршрутах. Rb.

Есть ли способ, чтобы friendly_id распознавал и не переписывал эти маршруты?

Спасибо

+0

Я добавил ответ, но было бы полезно увидеть relavent строки вашего файла 'routes.rb'. –

ответ

4

FriendlyID включает в себя модуль Зарезервировано, который предотвращает список предоставленных слов от использования в качестве дружественных слизней. Вы можете добавить свои статические маршруты в зарезервированный массив слов, который не позволит кому-то переписать ваши маршруты.

От FriendlyId RDocs

FriendlyId.defaults do |config| 
    config.use :reserved 
    # Reserve words for English and Spanish URLs 
    config.reserved_words = %w(new edit nueva nuevo editar) 
end 

Если вы все еще хотите, чтобы за титул, который зарезервирован вы можете создать новый метод, который FriendlyId бы использовать для слизняка. Эта часть из RDocs объясняет, что


колонки или метод?

FriendlyId всегда использует метод в качестве основы текста пули - не столбца. Это первый взгляд, это может показаться запутанным, но помните, что Active Record предоставляет методы для каждого столбца в связанной таблице модели, и это то, что использует FriendlyId.

Вот пример класса, который использует специальный метод для создания слизняка:

class Person < ActiveRecord::Base 
    friendly_id :name_and_location 
    def name_and_location 
    "#{name} from #{location}" 
    end 
end 

bob = Person.create! :name => "Bob Smith", :location => "New York City" 
bob.friendly_id #=> "bob-smith-from-new-york-city" 

Вы можете создать метод, как :title_with_id или :title_with_rand. это зависит от вас и от того, как вы хотите, чтобы пули выглядели.

Вы также хотели бы убедиться, что ваши routes.rb имеют ваши статические маршруты, указанные до маршрутов с дружественным идентификатором. Первый маршрут диспетчера совпадает с тем, где запрос будет обработан.

+0

Это сработало ... но вместо создания нового friendly_id, например about-2, он просто возвращает сообщение об ошибке «Friendly_id зарезервировано». Затем вам нужно вручную переименовать сообщение. Есть ли способ сделать так, чтобы это продолжалось так же: история делает? – user749798

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