我想为一个模型生成一个名称空间从一个控制器的网址。例如:Rails的url_for命名空间模型和非命名空间的控制器
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”工作?在您的意见之一提到
为什么不运行'rake routes'来查找您想要链接到上述'url_for'中的路由的方法名并将'w'传递给它? – deefour 2012-07-09 14:38:58
rake routes并不告诉我方法,但是,Rails给我的错误是它试图在控制器上调用“some_stuff_widget_path”,但控制器没有该方法b/c控制器没有命名空间。 – codecraig 2012-07-09 15:12:25
'耙路线'会告诉你在你的应用程序中的所有路线。通过传递'w',你要求铁轨猜测你要使用的路线的方法。由于您所处的命名空间情况,它错误地猜测出'some_stuff_widget_path',所以我建议您查看'rake routes'生成的路径列表以查找正确的方法路径。如果不存在这样的方法,那么您还没有定义任何路由来匹配您之后的路径,并且必须在'config/routes.rb'中执行。 – deefour 2012-07-09 15:35:57