Resource_Controller의 레일 중첩 리소스 액세스 문제
-
06-07-2019 - |
문제
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 ()를 통해 작업 할 수 있고 객체 메소드를 무시하지 않을 것입니다.
제휴하지 않습니다 StackOverflow