Rails url_for命名空间模型和非命名空间控制器

时间:2012-07-09 14:28:02

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

我正在尝试为从控制器命名的模型生成一个URL,而不是。例如:

module SomeStuff
  class Widget < ActiveRecord::Base; end
end

class WidgetsController < ApplicationController
  def create
    w = Widget.create(params)
    location = url_for w
    render :json => w, :location => location
  end
end

问题是Rails想要存在“some_stuff_widget_path”而它不存在因为控制器没有命名空间。我尝试了另一篇文章(http://stackoverflow.com/questions/4404440/rails-url-for-and-namespaced-models)中给出的解决方案,但它们似乎没有用。

我的模型在技术上是一个单独的gem,它是命名空间,然后我的Rails应用程序包含该gem并提供控制器。如果不改变设置,有没有办法让“url_for”工作?

1 个答案:

答案 0 :(得分:1)

正如您上面的一条评论所述,您有

resources :widgets

config/routes.rb中。在您尝试使用location设置上方的url_for中,您尝试匹配以下路线

widget GET    /widgets/:id(.:format)    widgets#show

但正如您所说,url_for w反而导致铁路猜测您正在寻找(不存在的) some_stuff_widget_path路线。而是将该行更改为

location = url_for widget_path(w)