【发布时间】:2010-11-02 06:57:59
【问题描述】:
我有一个令人费解的问题。在一个非常简单的 Ruby 应用程序中,我有三个类:Drivers、Jobs 和 Vehicles。所有三个类都只包含 Id 和 Name。所有三个类都具有相同的#index 和#show 方法,并且仅以 JSON 或 XML 呈现(事实上,它们的所有 CRUD 方法都是如此,除了名称之外,它们在所有方面都是相同的)。没有意见。例如:
def index
@drivers= Driver.all
respond_to do |format|
format.js { render :json => @drivers}
format.xml { render :xml => @drivers}
end
end
def show
@driver = Driver.find(params[:id])
respond_to do |format|
format.js { render :json => @driver}
format.xml { render :xml => @driver}
end
end
模型同样简约,仅包含:
class Driver< ActiveRecord::Base
validates_presence_of :name
end
在 routes.rb 我有:
map.resources :drivers
map.resources :jobs
map.resources :vehicles
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
我可以对所有三个类执行 POST/create、GET/index 和 PUT/update,并且 GET/read 也可以正常工作,直到我安装了“具有许多多态”ActiveRecord 插件并添加到 environment.rb:
require File.join(File.dirname(__FILE__), 'boot')
require 'has_many_polymorphs'
require 'active_support'
现在对于三门课中的两门,我不能再阅读了。如果我去 localhost:3000/drivers 他们都很好地列在 XML 但如果我去 localhost:3000/drivers/3 我得到一个错误:
Processing DriversController#show (for 127.0.0.1 at 2009-06-11 20:34:03) [GET]
Parameters: {"id"=>"3"}
[4;36;1mDriver Load (0.0ms)[0m
[0;1mSELECT * FROM "drivers" WHERE ("drivers"."id" = 3) [0m
ActionView::MissingTemplate
(Missing template drivers/show.erb in view path app/views):
app/controllers/drivers_controller.rb:14:in `show'
...etc
这之后是另一个意外错误:
Processing ApplicationController#show (for 127.0.0.1 at 2009-06-11 21:35:52)[GET]
Parameters: {"id"=>"3"}
NameError (uninitialized constant ApplicationController::AreaAccessDenied):
...etc
这里发生了什么?为什么相同的代码适用于一个类而不适用于其他两个类?为什么要尝试在 ApplicationController 上执行#view?
我发现,如果我为三个类中的每一个创建一个简单的 HTML 视图,这些都可以正常工作。对于我添加的每个课程:
format.html # show.html.erb
有了这个,转到 localhost:3000/drivers/3 会在 HTML 中呈现该项目,并且我在日志中没有错误。但是,如果将 .xml 附加到 URL,则其中两个类再次失败(错误消息与以前相同),而一个类将按预期输出 XML。更奇怪的是,在两个失败的类中,当将 .js 添加到 URL(以触发 JSON 呈现)时,我得到的是 HTML 输出!
这可能与“具有许多多态”插件有关吗?我听说有人在安装后遇到路由问题。从 environment.rb 中删除“具有许多多态”和“主动支持”(并重新启动服务器)似乎没有任何区别。然而,我的问题在安装后就开始了。我现在已经在这个问题上花费了几个小时并且开始变得有点绝望,谷歌几乎没有出现任何信息,这让我怀疑我一定错过了一些基本的东西。感激地收到任何启示或提示!
JS
【问题讨论】:
-
也许我应该在我的设置中添加一些细节:rails (2.3.2) activerecord (2.3.2, 2.2.2) activeresource (2.3.2, 2.2.2) has_many_polymorphs (2.13) mongrel ( 1.1.5) mysql (2.7.3)
标签: ruby-on-rails ruby routing