我的申请是在RoR
我有一个名为showsummary的动作/视图,其中ID已被传递到URL中,并且控制器已经使用它来实例化@vendor,其中@ vendor.name是公司的名称.
我想要的URL是,而不是显示/ 1 /在URL中具有/ vendor-name.
我怎么做?
解决方法
所有这些解决方案都使用find_by_name,这肯定需要在该列上有一个索引,并要求它们是唯一的.一个更好的解决方案,我们使用,牺牲少量的美丽,是使用前缀的供应商名称与其ID.这意味着您不必在名称列上有索引和/或需要唯一性.
vendor.rb
def to_param normalized_name = name.gsub(' ','-').gsub(/[^a-zA-Z0-9\_\-\.]/,'') "#{self.id}-#{normalized_name}" end
所以这会给你像这样的URL
/ 1-Acme的
/ 19-西夫韦
等等
然后在您的演出动作中,您仍然可以使用
vendor.find(params[:id])
因为该方法将隐式地在其参数上调用.to_i,并且在这样的字符串上调用to_i将始终返回数字前缀,并将剩余的文本 – 其所有绒毛放在该点.
以上假设您使用的是/:controller /:action /:id的默认路由,这将使您的URL看起来像
但如果你想让他们看看
/ 1-Acme的
然后有一条路
map.show_vendor '/:id',:controller => 'vendors',:action => 'show'
这意味着它几乎可以吞下你可能不想要的很多URL.引以为戒.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。