2013-12-01 2 views
2

У меня есть следующие в моей модели:Friendly_id: slug_candidates не называя слизняка правильно

class Dispenser < ActiveRecord::Base 

    extend FriendlyId 

    friendly_id :slug_candidates, use: :slugged 

    def slug_candidates 
    [ 
     :full_name, 
     [:full_name, :id] 
    ] 
    end 

end 

Это порождающие слизни, как:

=> 'bob-barker-bob-barker-15' 

Неужели это должно быть bob-barker или bob-barker-15, но не оба ,

https://github.com/norman/friendly_id

+1

Не то, чтобы это был источник проблемы, но после последнего элемента в вашем массиве slug_candidates '[: full_name,: id], <<<' –

+0

вы не должны иметь запятую, какую версию friendly_id вы используете ? вы пытались использовать мастер github? Я думаю, вы всегда должны использовать символы, иначе все поля будут оцениваться при вызове метода. – phoet

+0

Хорошо, фиксированные символы и запятая и использование friendly_id (4.0.10.1) ... до сих пор нет славы – Abram

ответ

2

Функциональность вы описываете в версии 5

См: https://github.com/norman/friendly_id#what-changed-in-version-50

То, что вы написали, по существу, только возвращая массив символов, который работает через параметризацию метод после его литья в колонну ...

2.0.0p247 :002 > ['name',['name',15]].to_s.parameterize # this is what friendly_id does in the background 
=> "name-name-15" 

Надеюсь, что помогает

+0

Итак, как вы решили проблему? !! –

6

FriendlyId автор здесь. Как уже упоминалось ранее, для этого вам нужен FriendlyId 5, он не будет работать с 4.0.

Также обратите внимание, что вы не можете использовать поле id в качестве части пули, потому что пул генерируется до создания записи.

Если вы хотите иметь поле id в пуле, то доступны более простые решения, отличные от FriendlyId, такие как переопределение метода to_param, как описано here.

+0

Спасибо Norman .. – Abram

+0

ах да .. забыл про это предостережение: D спасибо Норман! –

2

[: full_name,: id] - вы можете сделать это только onUpdate (когда: id уже установлен) Когда вы создаете новую запись в своей таблице DB, это не сработает!

Для вас цель, вы должны использовать некоторые, как этот

def slug_candidates 
[ 
    :name, 
    [:name, 2], 
    [:name, 3], 
    [:name, 4], 
    [:name, 5], 
    [:name, 6], 
    [:name, 7], 
] 

конца

Или вскоре

def slug_candidates 
    [:name] + Array.new(6) {|index| [:name, index+2]} 
end 

Это простой способ решить эту проблему без дополнительной SQL запроса

1

На slug, FriendlyID по умолчанию использует UUID (например, что-то вроде 2bc08962-b3dd-4f29-b2e6-244710c86106) и не принимает id. Так что-то вроде этого не будет работать:

def slug_candidates 
    [ 
    :full_name, 
    [:full_name, :id] 
    ] 
end 

Но вы можете предоставить собственный номер после :full_name вместо :id.

я сделал что-то вроде этого:

def slug_candidates 
    [ 
    :full_name, 
    [:full_name, "#{User.where(
     first_name: first_name, last_name: last_name 
    ).count + 1}"] 
    ] 
end 

Так что я получить слизней как john-doe, john-doe-2, john-doe-3 и т.д.

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