繁体   English   中英

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

[英]How do I create a user-defined redirect in ruby on rails?

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

www.domain.com/landing_pages/1

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

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

这将允许用户将登录页面定义为:

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

考虑到您的意见,您需要一个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 如果不让我知道,我希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM