2010-06-15 23 views
0

目前我们正在使用method_missing来调用我们控制器中对搜索引擎优化友好行为的调用,而不是为变量的每个可以想到的值创建操作。我们要的是URLS这样的:使用Rails没有method_missing获取SEO友好的URL?

/学生/ BobSmith

和NOT /学生/显示/ 342

难道还有比method_missing的一个清洁的解决方案?

谢谢!

回答

0

您可以很容易地为该特定格式定义路由。

map.connect "/students/:name", :controller => :students, :action => :show, :requirements => {:name => /[A-Z][A-Z]+/} 

然后在您的show动作中,您可以使用params [:name]按名称查找。

+0

这只适用于名称是唯一的。如果不是,那么你应该在名字前面加上学号。像“/ students/342-Bob-Smith”和map.connect“/ students /:id”。然后,只需执行params [:id] .to_i即可获取学生的ID。 – 2010-06-15 20:19:30

+0

这看起来好像接近我想要的。实质上,这会将当前登录名移入不同的方法,然后在缺少方法时将method_missing保留为打开状态。 – tesserakt 2010-06-16 03:27:57

+0

是的,请记住,他们确实必须是独一无二的迈克尔提到,但我真的无法想象,有任何你不能做的路线文件,必须使用方法丢失。你可能想查找ActiveRecord :: Base.to_param方法,以及如何创建seo友好的网址。 – 2010-06-16 05:20:24

0

您可以创建一个全部通路。将这个在的config/routes.rb中你想要的任何控制器和行动底部:

map.connect '*path', :controller => '...', :action => '...' 

路由的部分将提供给您的params[:path]阵列控制器。

+0

如果控制器中有其他动作会怎么样?这是否会覆盖这些? – tesserakt 2010-06-16 03:26:35