将参数作为轨道上的ruby中的路径变量传递

时间:2008-11-16 03:12:02

标签: ruby-on-rails database rails-routing

我还是ROR的新手,所以请原谅这个问题的简单性......

所以http://www.example.com/controller/:id在我的表中显示一条记录,其中:id是一个数字(1,2,3等)。

我有办法吗:URL中的id是显示记录中字段的值吗?这样我可以http://www.example.com/controller/record_field?我想对我的表中的特定记录进行人性化的引用。我敢肯定这一定是可能的。我是否在routes.rb中更改了某些内容?

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

最干净的方法是在模型中添加一个新的find方法(或者只是使用find_by_fieldname Rails让你在你的控件中)。然后你将让你的控制器使用该方法而不是常规查找(params [:id])来获取模型记录。

查看Ryan B关于此here的截屏视频。这很容易,而且他是一位好老师,所以你不应该有任何问题。

答案 1 :(得分:0)

我使用名为friendly_id的优秀rails插件。

http://github.com/norman/friendly_id/tree/master

那应该很好地解决你。它也有很好的文献记载。

注意可能具有现代希腊字符的字段 - 可能需要为这些字符找到解决方法。

答案 2 :(得分:0)

Jon Smock的解决方案也适用。我倾向于选择以下内容。

class Hamburger << ActiveRecord::Base

  #this normally defaults to id
  def to_param 
     name
  end

end

class SomeModelController << ApplicationController

  def show 
    @hamburger = Hamburger.find(params[:id])  #still default code
  end
end

#goes in some view
This is the <%= link_to "tastiest hamburger ever", url_for(@hamburger) %>.

松散地说,这是一种搜索引擎优化技术(美丽的网址也是用户友好的,即使你不关心搜索引擎优化,我也建议绝对是每个人,例如在登录后的网页上)。我对Rails SEO进行了更广泛的讨论,其中包括其他提示,here

重要提示:您应该在设计时考虑如果param应该更改您将要执行的操作。例如,在我的汉堡包场景中,我完全有可能将“Sinfully Delicious Cheeseburger”重命名为“Triple Bypass”。如果这会更改URL,则可能会产生一些影响,例如客户链接断开到我的网站。因此,对于生产用途,我通常会给这些模型一个不可变的permalink属性,我将其初始化为人类有意义的恰好一次。如果对象稍后改变,那么,URL保持不变。 (还有其他解决方案 - 这是最简单的解决方案。)