2014-03-30 6 views
0

필자의 Rails 설정에 이상한 문제가 발생하여 끝까지 혼란 스럽습니다. 내가NameError : 초기화되지 않은 상수 <Model> : <column_name>

class Book < ActiveRecord::Base 
    has_many :follows, :dependent => :destroy 
    belongs_to :user 
end 

class Follow < ActiveRecord::Base 
    attr_accessible :user_id, 
        :book_id, 
        :updated_at 
    belongs_to :user 
    belongs_to :book_id 
    validates :user_id, presence: true 
    validates :book_id, presence: true 
end 

class User < ActiveRecord::Base 
    has_many :books, :dependent => :destroy 
    has_many :follows, :dependent => :destroy 
end 

직관적으로 사용자와 책 사이에 다음 관계를 만들려고 해요 을, 사용자가 많은 책을 가질 수 있고 (다른 사용자로부터) 다른 책을 따를 수 있습니다 그 관계를 추적하기 위해 내 후속 모델을 원했다 나는 레일 콘솔 켜고 후속 인스턴스를 생성하고, book_id 값을 할당 할 때 내 데이터베이스 설정이 (PostgreSQL을) 마지막으로

# \d follows 
            Table "public.follows" 
    Column |   Type    |      Modifiers      
------------+-----------------------------+------------------------------------------------------ 
id   | integer      | not null default nextval('follows_id_seq'::regclass) 
user_id | integer      | 
book_id | integer      | 
created_at | timestamp without time zone | 
updated_at | timestamp without time zone | 
Indexes: 
    "follows_pkey" PRIMARY KEY, btree (id) 
    "index_follows_on_book_id_and_user_id" UNIQUE, btree (book_id, user_id) 
    "index_follows_on_book_id" btree (book_id) 
    "index_follows_on_user_id" btree (user_id) 

, 어떻게 여기

이, 그것은 t의 메시지를 뱉어 그는 제목 : 누군가에 무슨 일이 일어나고 있는지 말해 몇 가지 힌트를 줄 수있는 경우

rails c Loading development environment (Rails 4.0.0.rc1) 2.0.0p247 :001 > f = Follow.new => # 2.0.0p247 :004 > f.book_id = 48 NameError: uninitialized constant Follow::BookId from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/inheritance.rb:125:in compute_type' from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/reflection.rb:178:in klass' from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/associations/association.rb:207:in raise_on_type_mismatch!' from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/associations/belongs_to_association.rb:11:in replace' from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/associations/singular_association.rb:17:in writer' from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/associations/builder/association.rb:78:in book_id=' from (irb):4 from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0.rc1/lib/rails/commands/console.rb:90:in start' from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0.rc1/lib/rails/commands/console.rb:9:in start' from /Users/minghuazhao/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0.rc1/lib/rails/commands.rb:66:in <top (required)>' from bin/rails:4:in require' from bin/rails:4:in `'

, 그 좋지 않을까. 미리 감사드립니다.

답변

2

변경 :

belongs_to :book_id 

또한
belongs_to :book 

에, 당신이 정말로 접근로 표시 할 수 book_id과 user_id를 원하는가? 이렇게하면 해당 필드가 수정 된 게시물 요청으로 업데이트 될 수 있습니다.

+0

와우 ... 나는 너무 바보 같다. 하하! 나는 그 여분의 "_id"를 놓쳤다는 것을 믿을 수 없다! 이 u.follows.build (book_id : b.id)와 같은 "follow"관계를 만들 수 있도록 attr_accessible을 추가했습니다. 여기서 u는 사용자 인스턴스이고 b는 책 인스턴스입니다. – mhz

+0

@mhz -'f = u.follows.build; f.book = book'. 외래 키를 액세스 가능하게 설정하는 것은 위험한 일입니다. – BroiSatse

+0

아, 나는 다른 방법이 있다는 것을 몰랐다. 감사. – mhz

관련 문제