我有
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想要建立会员和帖子的关系,但不应该只是将这些为零。我甚至尝试在seeds.rb中明确地将数组设置为nil,但是得到了相同的错误。
我没理解什么?谢谢!
更新:添加了帖子和会员模型以供参考
答案 0 :(得分: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,:成员出现问题。但是你可以用不同的方式来解决这个问题。
答案 1 :(得分:2)
jizak的回答是帮助我朝着正确的方向发展,从找到我自己问题的解决方案的角度来看。起初,我试图将多个“项目”添加到单个has_many中,如上例所示:
has_many:members,:posts
我的Rails控制台游戏我同样的错误 - “TypeError:无法将符号转换为整数。”所以我把它分成两行:
has_many:成员
has_many:帖子
现在它运作正常。
我想我试图变得有点过于聪明,认为关联(has_many)类似于attr_accessor / writer / reader - 其中可以向单个attr_x添加多个东西(或者在这种情况下,has_many)。 Rails的情况并非如此(据我所知) - 每个协会都需要自己的个人声明。
答案 2 :(得分:0)
看起来您分配了不存在的关系(has_many:members,:posts)。你有这样的模特吗?模特有这样的关系吗?你可以发布会员和邮政模特的代码吗?