문제

Rails Resource_Controller 플러그인을 사용합니다. ReleaseScontroller가 있으며, 여기에는 사용자 콘트롤러 및 ProjectsController 내에 중첩됩니다.

Resource_Controller는 사용자로부터 릴리스를 가져 오려고 할 때 실패하지만 프로젝트에서 성공합니다. 사용자의 문제는 릴리스가 아닌 Enumerable :: Enumerator의 객체에서 릴리스 결과를 찾는 것입니다. 프로젝트에서 릴리스를 찾는 동일한 프로세스로 인해 올바른 릴리스 인스턴스를 식별합니다.

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>

열거 가능한 :: 열거 자에 사용 된 모든 릴리스 방법은 물론 실패합니다. 릴리스 방법의 정의는 다음과 같습니다.

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

프로젝트 콘트로에서 어려움없이 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

감사! 박사

도움이 되었습니까?

해결책

내 해결책은 반환 구조의 차이를 해결하는 것이 었습니다.

  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 ()를 통해 작업 할 수 있고 객체 메소드를 무시하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top