2011-01-21 7 views
1

저는 레일에 상당히 익숙하며 내 Devise 사용자 모델에 belongs_to 연관을 추가하려고합니다. 유증/등록 번호 편집에서기기 사용자 모델의 정의되지 않은 메소드

NoMethodError 정의되지 않은 방법은 '#

이 오류에 대한'department_id 내보기에서 collection_select에 발생 : 오류가 나는보기를 렌더링 할 때 얻을. 이 메소드는 belongs_to 연관에 의해 제공되지 않습니까?

사용자 모델 뒤로 보이는

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, :lockable and :timeoutable 
    devise :invitable, :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me 

    belongs_to :department 
end 

편집보기

%h2 
    Edit #{resource_name.to_s.humanize} 
= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| 
    = devise_error_messages! 
    %p 
    = f.label :email 
    %br/ 
    = f.text_field :email 
    %p 
    = f.label :department 
    %br/ 
    = collection_select(resource_name, :department_id, Department.all, :id, :name) 
    %p 
    ... 

답변

0

이것은 정말 작동해야합니다, 내가 소유하고 있습니다 : 나의 장치 사용자 모델에 대한 비즈니스와 비슷한 collection_for_select가 훌륭하게 작동합니다. 내가 생각할 수있는 유일한 점은 마이그레이션이 실행되지 않았으며 user.department_id 열이 아직없는 것입니다.

@njorden에서 언급 한 바와 같이
+0

당신이 옳았습니다. 문제점은이 데이터베이스에서 이미 실행 된 후에 마이그레이션을 변경했기 때문입니다. 나는 지금 어리 석다. – tdahlke

+0

아, 다행이야! 때때로 눈의 두 번째 쌍이 모든 차이를 만듭니다 ;-) – njorden

0

. collection_select은 연결의 has_many에 적합합니다. 의미 론적 힌트는 객체가 다른 객체 인 belongs_to 일 때 단수임을 나타냅니다. 관련된 컬렉션이 없습니다. 너는 department을 요구하고 1 개의 목표를 되 찾는다. 다른 방향에서 Departmenthas_many :users으로 설정된 경우 사용자를 요청하면 사용자 목록이 표시됩니다.

docs for select을 살펴보십시오. 그들은 당신이 부서와 함께하려고하는 것에 대한 간단한 예를 제공합니다 (블로그 게시물 작성자를 선택하는 형태로).

2

, 다음을 수행하십시오 :

  • attr_accessible :department_id 편집 등록 양식을 통해 대량 할당을 할 수 있도록 사용자 테이블에 department_id을 추가

    1. 마이그레이션을
  • 0

    그냥 내 경우를 추가하려면 비슷한 문제가있었습니다. 처음에는 각 사용자에게 department_id가있는 부서가 있었고 has_many로 이동하여 department_id를 사용자로부터 제거하는 것을 잊었습니다. 해결 방법은 department_id를 삭제하는 것입니다.

    관련 문제