我使用 Rails resource_controller 插件。我有一个 ReleasesController,它嵌套在 UsersController 和 ProjectsController 中。
Resource_controller 在尝试从 User 拉取发布时失败,但从 Project 成功。User 下的问题是在 Enumerable::Enumerator 类型的对象中找到 Release 结果,而不是 Release。在 Project 下查找 Release 的相同过程会导致识别正确的 Release 实例。
挖掘 r_c 代码,我发现了网络方法调用,我在脚本/控制台中复制了这个问题:
>> Project.first.releases.find 17
=> #<Release id: 17, project_id: 1, name: "FORTEEN", lock_version: 10, deleted_at: nil, created_at: "2009-06-22 17:56:10", updated_at: "2009-06-22 19:48:47">
>> User.first.releases.find 17
=> #<Enumerable::Enumerator:0x599e29c>
当然,在 Enumerable::Enumerator 上使用的任何 Release 方法都会失败。以下是发布方法的定义:
User:
def projects
# active is a named_scope on Project
employer ? employer.projects.active : Project.active
end
def releases
projects.collect { |p| p.releases }.flatten
end
Project:
has_many :releases, :dependent => :destroy
我毫无困难地使用 ProjectsControler 中的 User.projects 方法。我怀疑问题在于 User.releases 方法的定义,但感谢有关如何修复的建议。
这是我的路线定义:
map.resources :projects do |project|
project.resources :releases, :member => { :restore => :get }
end
map.resources :releases,
:member => { :restore => :get },
:except => [ :new, :create ]
map.resources :users, :member_path => '/:id', :nested_member_path =>
'/:user_id' do |user|
user.resources :projects
user.resources :releases,
:member => { :restore => :get },
:except => [ :new, :create ]
end
谢谢!博士