0

我正在尝试为一个模型生成一个 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 中,该 gem 具有命名空间,然后我的 Rails 应用程序包含该 gem 并提供控制器。在不更改该设置的情况下,有没有办法让“url_for”工作?

4

1 回答 1

1

正如您在上面的评论之一中提到的,您有

resources :widgets

在你的config/routes.rb. 在location您尝试在上面设置的 中url_for,您正在尝试匹配以下路线

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

但正如你所说,url_for w而是让 Rails 猜测你正在寻找(不存在的) some_stuff_widget_path路线。而是将该行更改为

location = url_for widget_path(w)
于 2012-07-09T16:05:20.120 回答