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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top