2013-01-09 2 views
2

У меня естьActiveRecord :: Base # создать - TypeError: не может преобразовать символ в Integer

class CreateRoles < ActiveRecord::Migration 
    def change 
    create_table :roles do |t| 
     t.string :name 

     t.timestamps 
    end 
    end 
end 

и

class Role < ActiveRecord::Base 
    attr_accessible :name 
    has_many :members, :posts 
end 

class Post < ActiveRecord::Base 
    attr_accessible :content, :title, :role_id 
    belongs_to :role 
end 

class Member < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :lockable 

    attr_accessible :role_id, :first_name, :last_name, :email, :password, :password_confirmation, :remember_me 
end 

В консоли Rails или в seeds.rb, я типа

Role.create(name: 'guest') 

и получить ошибку

TypeError: can't convert Symbol into Integer 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/builder/collection_association.rb:35:in `[]' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/builder/collection_association.rb:35:in `wrap_block_extension' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/builder/collection_association.rb:22:in `build' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/autosave_association.rb:139:in `build' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/builder/has_many.rb:10:in `build' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/builder/collection_association.rb:13:in `build' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations.rb:1195:in `has_many' 
    from /Users/ataylo9/Dropbox/Developer/hamsterdam/app/models/role.rb:3:in `<class:Role>' 
    from /Users/ataylo9/Dropbox/Developer/hamsterdam/app/models/role.rb:1:in `<top (required)>' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:469:in `load' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:469:in `block in load_file' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:639:in `new_constants_in' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:468:in `load_file' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:353:in `require_or_load' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:502:in `load_missing_constant' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:192:in `block in const_missing' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:190:in `each' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:190:in `const_missing' 
    from (irb):1 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start' 
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>' 
    from script/rails:6:in `require' 

Я знаю, что получаю сообщение об ошибке, потому что Rails хочет построить отношения для членов и сообщений, но не должен просто делать эти ноль. Я даже попытался явно установить массивы на nil в seeds.rb, но получил ту же ошибку.

Что я не понимаю? Благодаря!

ОБНОВЛЕНО: Добавлено сообщение и модель член для справки

ответ

0

Похоже, вы назначили отношения (HAS_MANY: члены,: сообщения), который не существует. У вас есть такие модели? Имеют ли модели такие отношения? Можете ли вы опубликовать код модели Member and Post?

+1

Я добавил их в вопрос. Благодаря! – hamsterdam

+0

У меня возникла проблема с объявлением нескольких отношений 'has_many' в одной строке. См. Ссылку на ответ @jizak ниже, что помогло мне идентифицировать этот вопрос. –

3

Я создал тот же проект с теми же моделями. И то, что я узнал об этом виде описания отношений, происходит именно в этой ошибке.

class Role < ActiveRecord::Base 
    attr_accessible :name 
    has_many :members, :posts 
end 

Я попытался это:

class Role < ActiveRecord::Base 
    attr_accessible :name 
    has_many :members 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    attr_accessible :name, :role_id 
    belongs_to :role 
end 

class Member < ActiveRecord::Base 
    attr_accessible :name, :role_id 
    belongs_to :role 
end 

И все работает. Я не знаю, почему, но выглядит как has_many: posts,: members возникает проблема. Но вы можете написать по-другому, чтобы решить эту проблему.

2

Ответ jizak - это то, что помогло мне подтолкнуть меня в правильном направлении, с точки зрения поиска решения моей собственной проблемы. Сначала я пытался добавить несколько «элементов» к одному has_many, как в приведенном выше примере:

has_many :members, :posts

Моя Рельсы консольная игра меня такая же ошибка - «Ошибка типа: не может преобразовать символ в Integer. " Поэтому я разделил его на две разные линии:

has_many :members
has_many :posts

И теперь это прекрасно работает.

Я думаю, я пытался быть слишком умным, мышление ассоциации (has_many) было бы похоже на attr_accessor/writer/reader - где можно добавить несколько вещей в один attr_x (или в этом случае has_many). Это не относится к Rails (насколько я знаю) - каждой ассоциации требуется отдельная декларация.

+0

Это помогло мне с my' TypeError: не может преобразовать символ в Integer. Благодаря! – Legat

Смежные вопросы