在 Rails 3.2.8 中。如果你有这条路线:
namespace :some_module do
resources :some_models
end
并且对应的 SomeModel 不在模块中,那么在 SomeModule::SomeModelsController 中如果指定位置为模型实例(如在创建中),那么它对 url 的假设将是错误的:
respond_with @some_model, location: @some_model
因为它将假设 url 是 some_model_instance_url 而不是 some_module_some_model_instance_url。
出于某种原因,当我试图变得棘手并对我认为在 create 方法中正确的 url 进行通用评估时(因为这是包含在控制器中的通用模块中):
respond_with @some_model, location: send("#{self.class.name.chomp('Controller').gsub('::','_').underscore.singularize}_url")
它导致:(No route matches {:action=>"show", :controller=>"some_module/some_models"}
这是复数,所以没有路线)
这似乎有点令人困惑。
但只是在做:
respond_with @some_model
当控制器设置为通过 json 响应时:
respond_to :json
对我来说,返回一个 204 并没有指示创建的实例的 id,而且您似乎需要一些指示,其中包括一个 ID 供客户端使用它(在不返回 id 的情况下创建一些东西不是好的做法)。
在与模型不同的模块中的控制器的 create 方法中使用 respond_with 的正确方法是什么,我们想要返回创建对象 id 的一些指示?