【发布时间】:2011-12-14 19:23:52
【问题描述】:
修正者: 更改模型名称以匹配 Rails 命名约定
当我尝试将技能加入用户时出现以下错误:
irb(main):006:0> user.skills << skill
NameError: uninitialized constant Users::Skill
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activerecord-3.1.3/lib/active_r
ecord/base.rb:1341:in `compute_type'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activerecord-3.1.3/lib/active_r
ecord/reflection.rb:173:in `klass'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activerecord-3.1.3/lib/active_r
ecord/associations/collection_association.rb:146:in `transaction'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activerecord-3.1.3/lib/active_r
ecord/associations/collection_association.rb:124:in `concat'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activerecord-3.1.3/lib/active_r
ecord/associations/collection_proxy.rb:118:in `<<'
from (irb):6
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/comman
ds/console.rb:45:in `start'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/comman
ds/console.rb:8:in `start'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/comman
ds.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
irb(main):007:0>
这是我的 users.rb 文件:
class Users < ActiveRecord::Base
has_and_belongs_to_many :skills
end
这是我的技能.rb 文件:
class Skills < ActiveRecord::Base
has_and_belongs_to_many :users
end
这是我的 schema.rb 文件:
ActiveRecord::Schema.define(:version => 20111214152402) do
create_table "skills", :force => true do |t|
t.integer "user_id"
t.string "description", :null => false
t.string "skill_name", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "skills", ["user_id"], :name => "index_skills_on_user_id"
create_table "users", :force => true do |t|
t.integer "skill_id"
t.string "first_name", :limit => 25
t.string "last_name", :limit => 50
t.string "email", :default => ""
t.string "password", :limit => 40
t.string "location", :limit => 100
t.string "status"
t.text "bio"
t.string "question1"
t.string "question2"
t.string "availability"
t.string "image"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "users", ["skill_id"], :name => "index_users_on_skill_id"
create_table "users_skills", :id => false, :force => true do |t|
t.integer "user_id"
t.integer "page_id"
end
add_index "users_skills", ["user_id", "page_id"], :name => "index_users_skills_on_user_id_and_page_id"
end
如果你能帮忙那就太好了!如果您需要查看其他文件,请告诉我。
【问题讨论】:
-
你是怎么得到复数型号名称的?那帮不上忙。在任何情况下,
habtm关系都需要skills << skill——您不会将技能列表设置为单个技能,而是添加技能。不过,在这种情况下,我会对类命名感到紧张。可能是错的。 -
使用由 has_and_belongs_to_many 宏生成的
collection<<(object, ...)方法,所以在你的情况下它是user.skills << skill -
我尝试了
user.skills << skill,但仍然出现错误 -
@Mike 你可以尝试使用标准的 Rails 类名,以防万一吗?设置一个新项目以按照正常的 Rails 方式进行完整性检查可能是最简单的。
-
命名约定解决了我的问题。现在我在尝试查找“skills_users”表而不是“users_skills”时遇到了问题,不知道为什么会发生这种情况。我只是要迁移一个新的skills_users 表并删除users_skills 我仍然很好奇为什么我需要这样做。谢谢
标签: mysql ruby-on-rails ruby rubygems