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

标签 ruby-on-rails redirect subdomain

我创建了一个名为 LandingPage 的模型,当前的路线是这样的:

www.domain.com/landing_pages/1

或者类似的东西。我会有几个这样的,所以 landing_page where 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 操作中应该包含以下内容:

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 中限制到子域的路由。在不限制子域的情况下,您必须确保您的用户没有使用您的 Controller 名称之一作为登陆页面词,从而增加程序的复杂性。

有一个名为 subdomain-fu 的插件,它应该允许您将路由限制到子域。该项目位于https://github.com/mbleigh/subdomain-fu .我希望这会有所帮助,如果没有请告诉我。

关于ruby-on-rails - 如何在 ruby​​ on rails 中创建用户定义的重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228261/

相关文章:

ruby-on-rails - 如何在 Ruby on Rails 中读取远程文件的内容?

javascript - "Could not find a JavaScript runtime"。我如何安装一个?

ruby-on-rails - Rails - 部署中的失败路由

由于浏览器缓存,PHP header 301 重定向不起作用

.htaccess - 将 .php URL 重定向到不带扩展名的 URL

iis - 有没有办法在站点上始终要求或强制使用 'www' 子域?

ruby-on-rails - 子域和本地安装的 Rails 应用

ruby-on-rails - 在 Rails 中生成外部 url

javascript - 将用户重定向到存储在变量中的 url (Javascript)

php - mod_rewrite : subdomain to controller