Ruby on rails 如何在RubyonRails中创建用户定义的重定向?

Ruby on rails 如何在RubyonRails中创建用户定义的重定向?,ruby-on-rails,redirect,subdomain,Ruby On Rails,Redirect,Subdomain,我创建了一个名为LandingPage的模型,当前路线如下: www.domain.com/landing_pages/1 def show @landing_page = LandingPage.first(:conditions => {:name => params[:name]}) redirect_to @landing_page end 或者类似的。我将有几个,所以登陆页面,其中id=1…n 但是,当有人创建登录页时,我希望他们能够为模型定义一个属性,例如“s

我创建了一个名为LandingPage的模型,当前路线如下:

www.domain.com/landing_pages/1
def show
  @landing_page = LandingPage.first(:conditions => {:name => params[:name]})
  redirect_to @landing_page
end
或者类似的。我将有几个,所以登陆页面,其中id=1…n

但是,当有人创建登录页时,我希望他们能够为模型定义一个属性,例如“superbowl”重定向到登录页/1,“nice”重定向到登录页/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
8 def显示
9
10@landing_page=LandingPage。其中(:name=>params[:name])。首先
11重定向到登陆页面路径(@landing\u page)
12
13#@landing_page=LandingPage.find(参数[:id])
14@redcloth\u landing\u page=redcloth.new(@landing\u page.message).to\u html
15表格=“假”
20完

考虑到您的评论,您需要一个重定向控制器,并且在routes.rb文件中,您需要:

map.connect '/:name', :controller => 'redirects', :action => 'show'
您需要确保此路由位于资源路由之后。在RedirectsController中,show方法类似于:

www.domain.com/landing_pages/1
def show
  @landing_page = LandingPage.first(:conditions => {:name => params[:name]})
  redirect_to @landing_page
end
我不确定您试图在www.domain.com/landing_pages/1/上实现什么,但以您的代码为例,您的landingpages控制器显示操作中应该包含以下内容:

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
def显示
@landing\u page=LandingPage.find(参数[:id])
@redcloth\u landing\u page=redcloth.new(@landing\u page.message).to\u html
form=”“false
结束
但是,这个解决方案不如以前好,因为除非我错过了它,否则我不知道可以在2.3.8中将路由约束到子域。在不限制子域的情况下,您必须确保您的用户没有使用某个控制器的名称作为登录页单词,从而增加了程序的复杂性


有一个名为subdomain fu的插件,它应该允许您将路由限制到子域。该项目位于。如果不让我知道的话,我希望这会有所帮助。

要添加到@Sean,你可以使用类似于创建url slug的东西。我没有路径参数,但我可能可以使用landing_page_url(@landing_page)?@Prateekdayal——就像slug看起来很有趣一样,slug是否自动相对于域,即使,它是嵌套的,例如domian.com/user/1/landing\u page/3?如果是这样,我该如何设置?@sean,谢谢,我以前没有使用过match…这似乎很有趣,听起来像是这样做的方式…我会检查一下…如果你有登录页面作为资源,这应该会起作用。此外,我刚刚意识到,您可能希望将路由限制为子域,我已将其添加到编辑中。