我使用Rails resource_controller插件。我有一个ReleasesController,它嵌套在UsersController和ProjectsController中。
Resource_controller在尝试从用户提取版本时失败,但是从Project获得成功。 User下的问题是在类型为Enumerable :: Enumerator的对象中找到Release结果,而不是Release。在下面找到发布的相同过程 项目导致识别正确的发布实例。
通过r_c代码,我已经找到了net方法调用,我在脚本/控制台中重复了这个问题:
>> 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
谢谢!医生
答案 0 :(得分:1)
我的解决方案是解决返回结构的差异:
def object
# @object = end_of_association_chain.find(param) unless param.nil?
# work-around r_c expectation of parent.releases result = Association proxy
# use select block to filter out desired object rt. find
@object ||= collection.select{ |o| o.id == param.to_i }.first unless param.nil?
@object
end
不是我的理想,我宁愿能够通过end_of_associaition_chain.find()而不是覆盖对象方法。