Trilhos problema de acesso a recursos Nested em resource_controller
-
06-07-2019 - |
Pergunta
I usando o plugin resource_controller os Rails. Eu tenho um ReleasesController, que está aninhado dentro de um UsersController e uma ProjectsController.
resource_controller falha quando ele tenta puxar a liberação do usuário, mas tem sucesso do Projeto. O problema em Usuário é encontrar os resultados de lançamento em um objeto do tipo, Enumerable :: Enumerator, e não um lançamento. O mesmo processo para encontrar um lançamento sob Os resultados do projeto para identificar a instância lançamento correta.
Vasculhando o código rc, eu descobri os métodos chamadas de rede, o que eu duplicado o problema dentro de script / console:
>> 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>
Qualquer método Release usado na Enumerable :: Enumerator falhar, é claro. Aqui estão as definições dos métodos libera:
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
Eu uso o método User.projects na ProjectsControler sem dificuldade. Eu suspeito que as mentiras problema com a definição do método User.releases, mas apreciam sugestões sobre como corrigir.
Aqui estão as minhas definições de rota:
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
Obrigado! dr
Solução
Minha solução foi trabalho em torno da diferença das estruturas de retorno:
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
Não é o meu ideal, eu prefiro ser capaz de trabalhar através da end_of_associaition_chain.find () e não substituir o método objeto.