假设有Post和Comment模型。
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
在config / routes.rb
中resources posts do
resources comments
end
在这种情况下,如果我们检索post id 1的注释id 12,那么正确的restful路由路径将如下:
post_comments_path(@comment.post, @comment)
,这将显示在客户端浏览器的URL框中,如下所示:
post/1/comments/12
我在这个上下文中关注的是,是否有办法隐藏上面的url字符串,包括id,并替换除id数据之外的其他表达式,例如,“post / comments”,或者不是。
如果这个问题不重要,虽然在查询字符串中公开了id数据,但我很好奇是否存在任何安全问题。
答案 0 :(得分:0)
您可能想要在网址中显示模型属性时签出Railscast。但是,更容易管理您的资源,保留网址中的id
。
http://railscasts.com/episodes/63-model-name-in-url
即使在Railscast上,如果你的网址中没有id
而只是将名字命名为posts/name-of-post
而不是{{1>,你会发现Ryan Bates谈论棘手的问题}}。
要更改网址,您只需覆盖Rails用于将模型转换为网址的posts/1
方法。但是,如果不传递to_param
,您还需要在其他地方修改代码。