Rails gem "friendly_id": Как получить предварительный просмотр слага, прежде чем его объект будет создан
Используя гем Rails "friendly_id", возможно ли получить "предварительный просмотр" слагаемого, который будет создан? То есть до того, как объект будет сохранен (и будет возвращен при вводе с использованием ajax-запроса)?
Если так, то как?
2 ответа
FriendyId автор здесь.
FriendlyId внутренне использует частные set_slug
сделать это. Этот метод вызывается через before_validation
Перезвоните. Если по какой-то причине вы не хотите звонить valid?
Вы можете вызвать set_slug
метод через send
или определите метод в вашей модели, который вызывает его:
instance = ModelClass.new
instance.send(:set_slug)
# or
class ModelClass < ActiveRecord::Base
friendly_id :name, use: :slugged
def generate_slug_preview
set_slug
end
end
Тем не менее, обратите внимание, что обход или игнорирование проверок часто является плохой идеей. Например, если ваша модель включила проверку на name
поле, а затем вы использовали это поле в качестве основы для слаг, а затем вы просматриваете слаг, который фактически никогда не будет сгенерирован.
За https://github.com/norman/friendly_id/blob/master/test/slugged_test.rb...
m1 = model_class.new :name => "a b c d"
m1.valid?
assert_equal "a-b-c-d", m1.slug
Похоже, это просто .slug
, По другим тестам вам не нужно create
- а new
Сделаю. Итак, ваша стратегия такова:
- добавить
onchange
обработчик текстового поля - каждый раз, когда пользователь изменяет его, используйте Ajax для отправки текущего значения на сервер
new
экземпляр вашей модели с именем или другим значением, установленным в значение Ajax, отправленное- вызов
slug
и отправьте результат обратно на веб-страницу - показать его на веб-странице
Все это стандартные вещи Ajax, не имеющие ничего общего с friendly_id
, Но все это заставляет меня задуматься, если - потому что вы показываете слизняк пользователю - friendly_id
позволит вам отредактировать слаг, как это делают высококлассные блоги.
И вы, вероятно, должны позвонить valid?
первый.