如何在rails上的ruby中创建用户定义的重定向?

时间:2011-03-08 04:14:16

标签: ruby-on-rails redirect subdomain

我创建了一个名为LandingPage的模型,当前路由类似于:

www.domain.com/landing_pages/1

或类似的东西。我会有几个,所以landing_page,其中id = 1 ... n。

但是,当有人创建着陆页时,我希望他们能够为模型定义属性,例如“superbowl”重定向到landing_page / 1,“nice”到landing_page / 2等。< / p>

这将允许用户将着陆页定义为:

subdomian.domain.com/superbowl 

将解析为

www.domain.com/landing_pages/1/

我该怎么做?每个landing_page都有一个属性“shortname”,该属性与其特定的landing_page相关联。

我在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 :(得分:0)

考虑到您的意见,您需要一个RedirectsController,并在您的routes.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/上尝试实现的目标,但是使用您的代码作为示例,您应该在LandingPagesController show action中有以下内容:

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。如果不让我知道,我希望这会有所帮助。