ruby-on-rails – url_for定制RESTful资源(复合键;不只是id)
发布时间:2020-12-16 22:38:29 所属栏目:百科 来源:网络整理
导读:给定以下资源定义: map.resources :posts,:except = [:show]map.post '/:year/:month/:slug,:controller = :posts,:action = :show 我可以使用这个语法使url_for为我工作: %= link_to @post.title,post_url(:year = '2010',:month = '02',:slug = 'test')
给定以下资源定义:
map.resources :posts,:except => [:show] map.post '/:year/:month/:slug,:controller => :posts,:action => :show 我可以使用这个语法使url_for为我工作: <%= link_to @post.title,post_url(:year => '2010',:month => '02',:slug => 'test') %> 但是有没有办法使这项工作? <%= link_to @post.title,@post %> 目前它抛出了这个错误: No route matches {:year=>#<Post id: 1,title: "test",(...)>,:controller=>"posts",:action=>"show"} 显然,它将@post对象传递给第一个路由参数(看起来像一个Rails错误…).但我可以为我工作吗?我会补充说,与default_url_options的混乱是一个死胡同. 解决方案只能在Rails 3.x中工作,但我不想使用任何插件. 解决方法
如何修复postController的url_for?可能不是非常优雅,但它是干,事情应该工作.
# app/controllers/posts_controller.rb class PostsController < ApplicationController protected def url_for(options = {} ) if options[:year].class.to_s == "Post" obj = options[:year] options[:year] = obj.year options[:month] = obj.month options[:slug] = obj.slug end super(options) end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |