Ant*_*nAL 1 ruby-on-rails fixtures has-and-belongs-to-many
我有一个简单的模型:
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
end
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
end
Run Code Online (Sandbox Code Playgroud)
我创建了一个简单的连接表:
class CreateUsersRoles < ActiveRecord::Migration
def self.up
create_table :users_roles, :id => false do |t|
t.integer :user_id
t.integer :role_id
t.timestamps
end
end
def self.down
drop_table :users_roles
end
end
Run Code Online (Sandbox Code Playgroud)
迁移后,shema.rb正在关注:
create_table "roles", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", :force => true do |t|
t.string "login"
t.string "password"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users_roles", :id => false, :force => true do |t|
t.integer "user_id"
t.integer "role_id"
t.datetime "created_at"
t.datetime "updated_at"
end
Run Code Online (Sandbox Code Playgroud)
这些条目以相同的顺序显示在"schema.rb"中
我按照以下方式安排了固定装置:
# roles.yml
user:
name: user
admin:
name: admin
moderator:
name: moderator
# users.yml
User1:
login: User1
password: User1
roles: user
User2:
login: User2
password: User2
roles: admin, moderator
User3:
login: User3
password: User3
roles: moderator
Run Code Online (Sandbox Code Playgroud)
并遇到一个问题:在"rake db:fixtures:load"rails上抱怨连接表的名称:
SQLite3 :: SQLException:没有这样的表:roles_users:DELETE FROM"roles_users"WHERE 1 = 1
问题是 - 为什么它期望"roles_users",而表是"users_roles"?
当Rails为连接表创建关联时,它期望模型按字母顺序排列.因为r在你之前,所以它创造了它roles_users.
我建议您重命名连接表,或者,您可以添加:join_table => "users_roles"到两个关联.
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |