2

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

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

有没有办法可以让 URL 中的 :id 成为显示记录中字段的值?这样我就可以拥有http://www.example.com/controller/record_field?我希望对表中的特定记录进行人性化的引用。我相信这一定是可能的。我是否更改了 routes.rb 中的某些内容?

谢谢您的帮助!

4

3 回答 3

4

最简洁的方法是在模型中添加一个新的 find 方法(或者简单地使用 Rails 提供的 find_by_fieldname 来控制)。然后您将让您的控制器使用该方法而不是常规的 find(params[:id]) 来提取您的模型记录。

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

于 2008-11-16T03:19:06.613 回答
0

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

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

那应该很好地解决你。它也有据可查。

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

于 2008-11-16T08:54:49.493 回答
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) %>.

粗略地说,这是一种 SEO 技术(漂亮的 URL 也是用户友好的,即使您不关心 SEO,我也向所有人推荐它们,例如在登录后的页面上)。我对 Rails SEO 进行了更深入的讨论,其中包括其他类似的技巧,请点击此处

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

于 2008-11-19T06:46:32.980 回答