#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Это рабочий процесс EtherPad:
load http://ietherpad.com
click 'new pad' which takes you here: http://ietherpad.com/ep/pad/newpad
Который затем перенаправляет на что-то вроде этого:
http://ietherpad.com/1vcs1YUf1Z
Как я могу это сделать в rails?
- Пусть мой новый метод rails controller сгенерирует UID, а затем перенаправит
- Мои маршруты rails каким-то образом используют этот uID после первого /, чтобы найти нужную запись и перенаправить к правильному методу отображения панели в контроллере?
Спасибо
Комментарии:
1. Мне действительно просто нужна помощь с маршрутами. Я могу разобраться с частью UID.
Ответ №1:
Абсолютно простой способ — сделать это:
В модели есть обратный вызов
class Thing < AR::Base
# assuming you have a slug field
before_create :generate_slug
private
def generate_slug
self.slug = some_uid_algorithm
end
end
Затем в контроллере используйте действие редактирования. Используйте динамический поисковик find_by_slug
и введите параметр id. Это возвращает запись, если она найдена, и возвращает nil, если не найдена. Если он не найден, вызовите create
, чтобы получить новый, который вызывает ваш обратный вызов slug.
def edit
@thing = Thing.find_by_slug(params[:id]) || Thing.create!
end
Направляйте свои маршруты для этого в действие редактирования вашего контроллера. Возможно, вам понадобится более надежный способ определения того, что такое допустимый slug, прежде чем вы начнете создавать записи, но по сути, так может работать «wiki».
Это может привести к созданию кучи ненужных записей, поэтому вам понадобится способ их удаления. Об этом позаботится какое-нибудь состояние вроде «ожидание» или «несохраненный» — когда пользователь обновит запись, измените состояние с «несохраненный» на «сохраненный», а затем удалите все «несохраненные» документы, которым 30 дней или что-то в этом роде.
Как это звучит?