2009-06-11 3 views
4

나는 신비한 문제가 있습니다. 아주 간단한 Ruby 앱에는 세 가지 클래스가 있습니다 : 드라이버, 작업 및 차량. 세 클래스는 모두 ID와 이름으로 구성됩니다. 세 개의 클래스 모두 #index와 #show 메소드가 동일하며 JSON 또는 XML로만 렌더링됩니다 (실제로 모든 CRUD 메소드에 적용됩니다. 이름은 같지만 이름은 동일합니다). 보기가 없습니다. 예를 들어 :뷰가없는 XML/JSON으로 라우팅되는 레일

def index 
    @drivers= Driver.all 
    respond_to do |format| 
    format.js { render :json => @drivers} 
    format.xml { render :xml => @drivers} 
    end 
end 

def show 
    @driver = Driver.find(params[:id]) 
    respond_to do |format| 
    format.js { render :json => @driver} 
    format.xml { render :xml => @driver} 
    end 
end 

모델은 유사 최소한 있습니다 만 포함 :

routes.rb에서
class Driver< ActiveRecord::Base 
    validates_presence_of :name 
end 

내가 가진 :

map.resources :drivers 
map.resources :jobs 
map.resources :vehicles 

map.connect ':controller/:action/:id' 
map.connect ':controller/:action/:id.:format' 

내가 GET, POST가 생성/수행 할 수 있습니다/색인 3 개의 클래스 모두에서 PUT/업데이트를 수행하고 GET/read는 "많은 폴리 ​​폼이 있습니다"ActiveRecord 플러그인을 설치하고 environment.rb에 추가 할 때까지 작동합니다.

require File.join(File.dirname(__FILE__), 'boot') 
require 'has_many_polymorphs' 
require 'active_support' 

이제 세 가지 클래스 중 두 가지에 대해 더 이상 읽을 수 없습니다. XML에 잘 3000/드라이버 그들은 모두 목록을하지만 난 로컬 호스트로 이동하는 경우 : 내가 로컬 호스트에 가면이 다른 예기치하여를 다음에

Processing DriversController#show (for 127.0.0.1 at 2009-06-11 20:34:03) [GET] 
    Parameters: {"id"=>"3"} 
    [4;36;1mDriver Load (0.0ms)[0m 
    [0;1mSELECT * FROM "drivers" WHERE ("drivers"."id" = 3) [0m 

ActionView::MissingTemplate 
    (Missing template drivers/show.erb in view path app/views): 
    app/controllers/drivers_controller.rb:14:in `show' 

    ...etc 

: 3000/드라이버/3 오류가 발생합니다 오류 :

Processing ApplicationController#show (for 127.0.0.1 at 2009-06-11 21:35:52)[GET] 
    Parameters: {"id"=>"3"} 
NameError (uninitialized constant ApplicationController::AreaAccessDenied): 

...etc 

여기에 무슨 일이 일어나고 있습니까? 한 클래스에서 같은 코드가 작동하지만 다른 두 클래스에서는 작동하지 않는 이유는 무엇입니까? ApplicationController에 #view를 쓰려고하는 이유는 무엇입니까?

세 가지 클래스 각각에 대해 간단한 HTML보기를 만들면 정상적으로 작동한다는 것을 알게되었습니다. 각 클래스에 내가 추가 :이

format.html # show.html.erb 

을 장소에, 에가는 로컬 호스트 : 3000/드라이버/3가 HTML에서 항목을 렌더링하고 내가 로그에 오류를 얻을 수 없습니다. 그러나 URL에 .xml을 첨부하면 두 개의 클래스 (이전과 같은 오류 메시지 사용)에서 다시 실패하고 XML은 예상대로 출력됩니다. JSON 렌더링을 트리거하기 위해 .js를 URL에 추가 할 때 두 가지 실패한 클래스에서 낯선 사람이라도 대신 HTML 출력을 얻습니다!

"has many polymorphs"플러그인과 관련이 있습니까? 설치 후 라우팅 문제가있는 것으로 들었습니다. environment.rb에서 "많은 다형성을 가지고 있습니다"및 "능동적 인 지원"을 제거하면 (그리고 서버를 재부팅해도) 아무런 차이가없는 것처럼 보입니다. 그러나 내 문제는 그것이 설치 된 후에 시작되었습니다. 나는 지금이 문제에 대해 많은 시간을 보냈으며 조금 절박 해지기 시작했다. 구글은 사실 초등 정보를 찾지 못했기 때문에 초등학생을 놓친 것 같아 보인다. 계몽 또는 힌트를 기꺼이 받아 들였습니다! 당신이 설치 한 경우

JS

+0

은 아마도 내 설치에 대한 몇 가지 세부 사항을 추가해야합니다 레일 (2.3.2) 액티브을 (2.3.2, 2.2.2) activeresource (2.3.2, 2.2.2) has_many_polymorphs (2.13) 잡종 (1.1.5) mysql (2.7.3) –

답변

0

은 플러그인 많은 형체를 가지고, 당신은 공급 업체/플러그인에서하지으로 environment.rb에서 제거해야합니다. 해당 플러그인을 rm -rf 보내 주시면 다시 시도하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 많은 polymorphs 플러그인을 제거했지만 슬프게도 변화가 없습니다. –

+0

그리고 서버를 다시 시작 했습니까? –

+0

물론 항상 그렇게하십시오. –

-3

지금 가장 좋은 방법은 처음부터 앱을 다시 시작하는 것일 수 있습니다. 레일은 그렇게 좋아요.

+0

그게 정확히 내가 의지 한 것입니다. 아마도 내 변경 사항을 하나씩 다시 적용하고이를 파악하려고 할 때마다 테스트하는 데 훨씬 적은 시간이 걸릴 것입니다. 부끄러움 정말, 나는 RoR을 좋아하기 시작했다. ... –

+0

이 "최선의 대답"을 수락하게 될 것이라고 말하지 말아라. ... –

+0

어쩌면 두 가지 일에 diff를 할 수있다. . 또는 더 나은 - 다만 zip는 그 (것)들을 저에게 보낸다. 나는 이전 버전이 어떻게 엉성 해 졌는지에 대해 매우 궁금해. Rails는 그런 의미에서 허약하다. Rails 2.3. *에는 확실히 그 단점이있다. 나는 더 많은 도움을받을 수 있었으면 좋겠지 만, 당신이 의심 할 여지없이 결론을 내리면,이 상황은 멀리서도 거의 도움이되지 못했습니다. :) 다행 이군. 처음부터 재시작하는 것은 레일이있는 상황에서, 특히 자신의 것과 같은 아주 새로운 프로젝트의 경우 훨씬 더 빠릅니다. –

0

확인. 나는 포기 했어.이전에 "많은 폴리 ​​모프가 있음"버전으로 돌아가서 변경 사항을 하나씩 적용하여 각각의 테스트가 실행 중인지 확인한 후 실행했습니다. 약 1 시간 후에 나는/app/stuff들이 모두 곤경에 처했을 때와 같다고 생각한다. '활성 지원'및 클래스/모델 /보기가 올바른지 (즉, HTML이 전혀 표시되지 않음, &보기가 없음) '와 함께 다양한 폴리모프가 있음'이 다시 설치되고 필요합니다. 그리고 어떨지 짐작하십시오. 모든 것이 완벽하게 작동합니다!

JS에게 ... 어떤 경우에 나는 아직도 정말 그 잘못 여기 가서 무엇인지 알고 싶습니다

P.S.을 - 나는 그 날 행복하거나 슬픈 여부를 모른다 아, 그리고 RoR을 계속 사용하려면 SVN을 우선해야합니다. RoR이 매우 쉽고 신비하게 깨지기 시작한 이래로 그런 작은 프로젝트에도 꼭 필요한 전부입니다 (이것은 제가 처음으로 5 시간 이상 WTF가 아니 었습니다).

+0

나는 그 경험을 가지고있다. 방금 레일에. 어쩌면 두 가지 사항을 비교해 보면 진정한 결과를 얻을 수 있습니다. 글쎄, 내 제안은 실제로 최고의 대답이었던 것 같다. 죄송합니다 :) –

+0

프로그램이 10-15 라인 이상인 경우 소스 제어를 사용해야합니다. :) 그러나 나는 자식을 제안 할 것이고, 그것은 훨씬 더 강력하다. 어쨌든 소스 컨트롤을 사용하고 단일 기능 변경 사항을 커밋해야합니다. 그것은 추적하기가 훨씬 쉬워집니다. git으로 그렇게했다면'git bisect '를 사용하여 파손 된 것을 추적 할 수있었습니다. (환경 문제가 아니라고 가정 할 때) – DGM

+0

오, 나는 지금 몇 년 동안 지냈다. 그래도 git과 친구가되지는 않았으므로 지금은 좋은 SVN입니다. 어쩌면 어느 날 ... –