我创建了一个名为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
答案 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。如果不让我知道,我希望这会有所帮助。