在Rails路由中使用Params来生成url

时间:2011-09-13 16:34:52

标签: ruby-on-rails ruby-on-rails-3

我有一个范围路线:

 scope :path => ":db", :defaults => {:db => "default"} do
   resources :boxes
 end

生成

    boxes GET    /:db/boxes(.:format)          {:db=>"default", :action=>"index", :controller=>"boxes"}
         POST   /:db/boxes(.:format)          {:db=>"default", :action=>"create", :controller=>"boxes"}
 new_box GET    /:db/boxes/new(.:format)      {:db=>"default", :action=>"new", :controller=>"boxes"}
edit_box GET    /:db/boxes/:id/edit(.:format) {:db=>"default", :action=>"edit", :controller=>"boxes"}
     box GET    /:db/boxes/:id(.:format)      {:db=>"default", :action=>"show", :controller=>"boxes"}
         PUT    /:db/boxes/:id(.:format)      {:db=>"default", :action=>"update", :controller=>"boxes"}
         DELETE /:db/boxes/:id(.:format)      {:db=>"default", :action=>"destroy", :controller=>"boxes"}

我希望能够调用boxes_url(例如),并推断出应该从当前请求中推断出:db的值。

示例:

请求“/ lax / boxes”。在模板中,我调用box_url(@box),它会生成url“/ lax / boxes / 1”(其中@ box.id = 1)。

我目前看到的唯一解决方案是始终在url中包含params [:db],调用box_url(params [:db],@ box)。

有没有人知道我所描述的行为?

1 个答案:

答案 0 :(得分:0)

这(在帮助文件中)应该有效:

def box_url(box)
    super(params[:db], box)
end

不幸的是,您必须为要覆盖的每个网址/路径重复此操作。