Как создать пользовательский редирект в ruby ​​on rails? - PullRequest
3 голосов
/ 08 марта 2011

Я создал модель под названием LandingPage, и текущий маршрут выглядит примерно так:

www.domain.com/landing_pages/1

Или что-то в этом роде.У меня будет несколько из них, так что Landing_Page, где id = 1 ... n.

Однако, когда кто-то создает целевую страницу, я хотел бы, чтобы они могли определить атрибут для модели, такой как«superbowl» для перенаправления на Landing_Page / 1, «хороший» на Landing_Page / 2 и т. д.

Это позволит пользователю определить целевую страницу как:

subdomian.domain.com/superbowl 

, что приведет к разрешениюна

www.domain.com/landing_pages/1/

Как мне это сделать?Каждая лендинговая страница имеет атрибут 'shortname', который связан со своей конкретной лендинговой страницей.

Я на Rails 2.3.8.Я догадываюсь о путях прохождения доступных коротких имен, но не уверен.

 8   def show
  9     
 10     @landing_page = LandingPage.where(:name => params[:name]).first
 11     redirect_to landing_page_path(@landing_page)
 12     
 13     #@landing_page = LandingPage.find(params[:id])
 14     @redcloth_landing_page = RedCloth.new(@landing_page.message).to_html
 15     form = "<div id='form'>" << @landing_page.form << "</div>"
 16     
 17     @redcloth_landing_page.gsub!("{Form}",form)
 18     
 19     render :layout => false
 20   end

1 Ответ

0 голосов
/ 08 марта 2011

Принимая во внимание ваши комментарии, вам нужен RedirectsController, и в вашем файле rout.rb вы получите:

map.connect '/:name', :controller => 'redirects', :action => 'show'

Вы должны убедиться, что этот маршрут идет после маршрутов вашего ресурса. В вашем RedirectsController метод show будет выглядеть примерно так:

def show
  @landing_page = LandingPage.first(:conditions => {:name => params[:name]})
  redirect_to @landing_page
end

Я не уверен, чего вы пытаетесь достичь на www.domain.com/landing_pages/1/, но используя ваш код в качестве примера, вы должны иметь следующее в вашем действии show LandingPagesController:

def show

  @landing_page = LandingPage.find(params[:id])
  @redcloth_landing_page = RedCloth.new(@landing_page.message).to_html
  form = "<div id='form'>" << @landing_page.form << "</div>"

  @redcloth_landing_page.gsub!("{Form}",form)

  render :layout => false
end

Однако это решение не так хорошо, как раньше, потому что, если я не пропущу его, я не знаю, что вы можете ограничить маршрут к поддомену в 2.3.8. Не ограничиваясь поддоменами, вы должны убедиться, что ваши пользователи не использовали одно из имен ваших контроллеров в качестве слова целевой страницы, что усложняет вашу программу.

Существует плагин, называемый subdomain-fu, который должен позволять вам ограничивать ваши маршруты субдоменом. Проект находится по адресу https://github.com/mbleigh/subdomain-fu. Надеюсь, это поможет, если не сообщите мне.

...