2009-10-07 8 views
0

현재 레일즈 애플리케이션에 6 개의 모델 루비가 있으며, 여기에 authlogic을 추가했습니다. 전체적인 설치Ruby on Rails 사용자 설정

User :has_many categories, topics,messages 
Categories has_many topics, 
Topics has_many messages 
(와 대응 belongs_to 대향 링크)

이다.

current_user.categories.find (2)에 액세스하려고하면 컨트롤러에 결과가 반환되지 않습니다. 그것은 has_many에서 USER_ID을 저장하지 않습니다

@msg = current_user.messages.build(params[:message]) 
@msg.save 

또한

, 나는 그런 다음이

current_user.topics.find(params[:topic_id]).messages.build 

실행 해보십시오. 이 프로그램의

모든 기능은 CURRENT_USER 지시하기 전에 작업이 추가되었습니다했다.

나는 설정에 실수를하고 있습니까? 또는 실행?

빌드 후에 연관이 저장되지 않으므로 나중에 모델에 user_id 필드를 추가 할 수 있습니까?

모든 질문에 대해 사과드립니다. 미리 감사드립니다.

답변

1

나는 최선의 방법은 단계별로 진행하는 것입니다. current_user는 무엇을 반환합니까? 해당 사용자의 ID가 DB에있는 ID와 일치합니까? 해당 사용자에게 카테고리가 있습니까? 그들 중 누구도 2의 ID를 갖고 있습니까?

체인 된 통화에서 문제를 단일 레이어로 분리 할 수 ​​있으면 디버깅이 훨씬 쉬워집니다.

+1

나는 이것이 매우 많은 결합에 동의한다. 당신은 많은 층 중 어느 것이 부서지고 있는지 전혀 모른다. ActiveRecord 로깅을 설정하여 생성되는 쿼리를 확인하는 것도 도움이 될 수 있습니다. –

0

감사합니다. 카일. 컨트롤러를 사용하여 연결을 통해 생성시 컨트롤러를 할당하는 대신 모델에서 필터를 사용하여 문제를 해결했습니다. Current_user는 authlogic을 사용하여 현재 사용자의 레코드를 반환하기 만합니다. 프로젝트가 활발한 곳을 좋아하고 시각적 조정, 보안 및 CSS를 추가 한 후에 배포 할 수 있습니다. :). 콜백 및 필터는 개발하고있는 모든 것을 놀라게합니다. 또한, application_controller에서 모델로 변수를 가져와야하는 경우 클래스 인스턴스 변수 (at 기호)가 아닌 달러 기호 ruby ​​변수를 사용하십시오. 레일은 PHP 나 sintra 앱과 비교할 때 매우 쉽습니다. 또한 레일 애플리케이션에 몇 개의 모델이 사용됩니까?

+0

달러 기호를 사용하는 경우 어두운 길을 걸어 가고 있습니다. 달러 기호는 전역에 사용되며 일반적으로 전역은 클래스를 긴밀하게 연결한다는 의미입니다. Rails 응용 프로그램에 사용되는 모델의 수에 대해 무엇을 의미하는지 확신 할 수 없습니다. 일부 프로젝트는 아마도 소수에 불과할 것이고 수십 개, 수백 개가 될 것입니다. 앱의 범위와 코드 기반의 성숙도에 따라 다릅니다. 블로그 나 트위터는 Mint.com이나 그보다 훨씬 적은 수의 모델을 필요로합니다. – Kyle

+0

커다란 앱을 아직 디버그하고 싶지 않습니다. 6 모델로 충분합니다. 글로벌을 사용하지 않는 경우 어떻게 컨트롤러에서 모델로 현재 사용자 개체를 가져올 수 있습니까? 그것은 내 응용 프로그램에서 유일한 글로벌 ... 그리고 실제로 처음으로 루비와 하나가 필요했습니다. – CodeJoust