레일즈에서 컨트롤러를 동적으로 생성하는 가장 좋은 방법은 무엇입니까?레일에서 컨트롤러 프로그래밍 방식으로 만들기
클래스를 상속받은 컨트롤러를 생성해야하는 클래스가 있습니다./app/controllers에 여러 개의 파일을 만들 수는 있지만 기본적으로 빈 파일입니다. 이러한 클래스를 동적으로 생성하고 레일스의 다른 컨트롤러처럼 처리하도록하는 방법이 있어야합니다. dev 모드에서 올바르게 다시로드되었습니다.
는 내가 설정/초기화에이 퍼팅 시도 :이 일을
FL.contact_types.each do |contact_type|
controller_name = "#{contact_type.pluralize}Controller"
Object.const_set(controller_name.to_sym, Class.new(ContactsController)) unless Object.const_defined?(controller_name.to_sym)
end
,하지만 난 AuthenticatedSystem의 사본 모듈 트리에서 제거하지만 여전히있다 "종속성/다시로드 문제로 실행 얻을 active "는 ContactController가 AuthenticatedSystem을 포함하는 ApplicationController로부터 상속 받기 때문에 발생합니다.
빈 파일을 많이 만드는 것이 가장 좋은 해결책입니까?
들어오는 작업의 특정 집합에 대한 포괄 컨트롤러를 원하는 것처럼 들립니다. –
음, 각 ContactType에 대해 별도의 컨트롤러가 필요하다고 생각했습니다. 그들 모두는 접촉 이었지만 몇몇은 여분의 필드 또는 두 개를 가졌습니다. 그래서 STI는 올바른 방향과 같았습니다. 그리고 그것은 작동하지만, 방금 똑같은 일을 한 모든 컨트롤러를 다 잡으려고 했으므로 ContactsController에서 모두 상속받습니다. 그러나 추가 컨트롤러를 없애고 ContactsController를 통해 모든 작업을 수행 할 수 있습니다. 형식을 명시 적으로 설정하면 form_for 마법을 사용할 수 없습니다. 나는 그것이 여전히가는 길일지도 모른다라고 생각한다. 그냥 다른 혼란. –
글쎄, 난 그냥 내 연락처 컨트롤러를 통해 모든 것을 실행 솔루션으로 갔다. 나는 그것을 좋아하지 않지만, 두 가지면에서 상반되는 것처럼 보인다. 이 방법은 더 적은 해킹을 사용해야하는 것처럼 보였습니다. 그게 뭔가를 말한 것 같아요. :) 감사합니다 –