目前我们正在使用method_missing来调用我们控制器中对搜索引擎优化友好行为的调用,而不是为变量的每个可以想到的值创建操作。我们要的是URLS这样的:使用Rails没有method_missing获取SEO友好的URL?
/学生/ BobSmith
和NOT /学生/显示/ 342
难道还有比method_missing的一个清洁的解决方案?
谢谢!
目前我们正在使用method_missing来调用我们控制器中对搜索引擎优化友好行为的调用,而不是为变量的每个可以想到的值创建操作。我们要的是URLS这样的:使用Rails没有method_missing获取SEO友好的URL?
/学生/ BobSmith
和NOT /学生/显示/ 342
难道还有比method_missing的一个清洁的解决方案?
谢谢!
您可以很容易地为该特定格式定义路由。
map.connect "/students/:name", :controller => :students, :action => :show, :requirements => {:name => /[A-Z][A-Z]+/}
然后在您的show动作中,您可以使用params [:name]按名称查找。
您可以创建一个全部通路。将这个在的config/routes.rb中你想要的任何控制器和行动底部:
map.connect '*path', :controller => '...', :action => '...'
路由的部分将提供给您的params[:path]
阵列控制器。
如果控制器中有其他动作会怎么样?这是否会覆盖这些? – tesserakt 2010-06-16 03:26:35
这只适用于名称是唯一的。如果不是,那么你应该在名字前面加上学号。像“/ students/342-Bob-Smith”和map.connect“/ students /:id”。然后,只需执行params [:id] .to_i即可获取学生的ID。 – 2010-06-15 20:19:30
这看起来好像接近我想要的。实质上,这会将当前登录名移入不同的方法,然后在缺少方法时将method_missing保留为打开状态。 – tesserakt 2010-06-16 03:27:57
是的,请记住,他们确实必须是独一无二的迈克尔提到,但我真的无法想象,有任何你不能做的路线文件,必须使用方法丢失。你可能想查找ActiveRecord :: Base.to_param方法,以及如何创建seo友好的网址。 – 2010-06-16 05:20:24