如何在rails控制台中访问数据库的关系表UserRole
?
架构:
ActiveRecord::Schema.define(version: 20140709163149) do
create_table "users", force: true do |t|
t.string "stuff"
...
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "roles", force: true do |t|
t.string "label"
...
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "user_roles", force: true do |t|
t.integer "user_id"
t.integer "role_id"
...
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "user_roles", ["role_id"], name: "index_user_roles_on_role_id"
add_index "user_roles", ["user_id"], name: "index_user_roles_on_user_id"
在rails控制台中,我可以User.all()
并获取所有用户,我可以Role.all()
,但如何访问关系表user_role
?最终我可以为数据库播种。
如果我尝试UserRole.all()
,我会收到以下信息:
NameError: uninitialized constant UserRole
from (irb):7
from /Users/dejanew/.rvm/gems/ruby-2.1.1@global/gems/railties-4.1.1/lib/rails/commands/console.rb:90:in `start'
from /Users/dejanew/.rvm/gems/ruby-2.1.1@global/gems/railties-4.1.1/lib/rails/commands/console.rb:9:in `start'
from /Users/dejanew/.rvm/gems/ruby-2.1.1@global/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:69:in `console'
from /Users/dejanew/.rvm/gems/ruby-2.1.1@global/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
from /Users/dejanew/.rvm/gems/ruby-2.1.1@global/gems/railties-4.1.1/lib/rails/commands.rb:17:in `<top (required)>'
from /Users/dejanew/Dropbox/dev/SDF/bin/rails:8:in `<top (required)>'
from /Users/dejanew/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/dejanew/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from -e:1:in `<main>'
答案 0 :(得分:1)
您需要在UserRole
中定义名为app/models/user_role.rb
的模型。
当您使用User.all()
和Roll.all()
时,您将分别访问app/models/user.rb
和app/models/role.rb
中定义的类(可能)。您不通过Rails控制台中提供的一些语法糖直接访问表,您只需使用应用程序代码定义的普通旧类。您需要对UserRole
执行相同操作。
答案 1 :(得分:1)
用户和角色不是数据库表。他们的模型,这是Rails中使用的一个词,意思是继承自ActiveRecord :: Base的Ruby类。
您在rails generate
中键入(或使用class User < ActiveRecord::Base ... end
)/app/models/user.rb
生成时定义了用户模型。 Rails自动将用户和角色模型挂钩到users
和roles
表,但这是(出于我们的目的)巧合。存在用户和角色是因为在/app/models
中定义了具有这些名称的类,而不是因为存在名为users
和roles
的数据库表。
如果您想拥有一个名为UserRole
的模型,您必须定义它。您可以通过创建(或生成)/users/models/user_role.rb
并将class UserRole < ActiveRecord::Base ... end
放入其中来实现这一目标。
答案 2 :(得分:1)
希望这是一个简单的解决方案。
您的app/models
目录应该有user.rb
,user_role.rb
和role.rb
。
user_role.rb
看起来像这样:
class UserRole < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
另请注意,type
的{{1}}字段可能会触发single table inheritance。