我还是ROR的新手,所以请原谅这个问题的简单性......
所以http://www.example.com/controller/:id在我的表中显示一条记录,其中:id是一个数字(1,2,3等)。
我有办法吗:URL中的id是显示记录中字段的值吗?这样我可以http://www.example.com/controller/record_field?我想对我的表中的特定记录进行人性化的引用。我敢肯定这一定是可能的。我是否在routes.rb中更改了某些内容?
感谢您的帮助!
答案 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保持不变。 (还有其他解决方案 - 这是最简单的解决方案。)