Rails реализация ЧПУ

Рейтинг: 1Ответов: 1Опубликовано: 17.12.2014

Как правильно реализовать возможность выбирать вид ссылки, то есть чтобы была воможность менять формат ссылки, например, как в wordpress: url/post/id urp/post/title url/date/title url/title

Правильным ли решением будет сделать таблицу settings со строкой url_pattern, содержащей, к примеру, номер варианта или нужный формат. И сделать в application хелпер, который будет получать значение параметра url_pattern из базы (или из глобальной переменной) и через case подставлять нужный формат ссылки?

Ответы

▲ 4Принят

Ну, если вы хотите, чтобы запись отвечала по любому из этих урлов одновременно, то я сделал бы примерно так (код не тестирован и намеренно упрощён):

В routes:

get 'post/:id' => 'posts#show', as: :by_id_or_title
get 'date/:date' => 'posts#show', as: :by_date

posts_controller:

def show
  @post = Post.find_by_title_or_id(params[:id])||Post.find_by_date(params[:date])
end

models/post:

def self.find_by_title_or_id(id)
  return nil if id.blank?
  find_by(title: id)||find_by(id: id)
end

def self.find_by_date(date)
  return nil if date.blank?
  find_by(date_field: date)
end

Ссылки создавать примерно так: link_to 'Link by date', by_date_path(@post.date_field)

Посмотреть маршруты: rake routes. Почитать подробнее: http://rusrails.ru/rails-routing

При работе с датами уделите внимание формату, дабы то, что вы предаёте хелперу совпадало с тем, что вы ищете по базе.