相关疑难解决方法(0)

如何根据查询插入多行?

我正在开发一个具有文件夹,组和权限的系统.权限确定不同组在每个文件夹中可以执行的操作.因此,每当我创建一个新组时,我想在每个文件夹的权限表中添加一条记录,描述新组在该文件夹中可以执行的操作.

目前我只是循环遍历系统中的所有文件夹并为每个文件夹添加权限记录:

group = Group.create(params)

Folder.all.each do |folder|
  Permission.create! do |permission|
    permission.folder = folder
    permission.group = group
    permission.can_create = true
    permission.can_read = true
    permission.can_update = true
    permission.can_delete = true
  end
end
Run Code Online (Sandbox Code Playgroud)

我不喜欢每次创建新组时都必须遍历所有记录的事实.所以基本上我正在寻找一种使用ActiveRecord执行以下SQL的优雅方法.

INSERT INTO permissions (folder_id, group_id, can_creat, can_read, can_update, can_delete)
SELECT id, #{group.id}, true, true, true, true
FROM folders
Run Code Online (Sandbox Code Playgroud)

我想我可以运行上面的查询find_by_sql,但感觉不对,因为我INSERTing不是SELECTing.

或者我应该忘记这一点并继续循环我的文件夹记录,如上例所示?

提前致谢.

mysql activerecord ruby-on-rails ruby-on-rails-3

1
推荐指数
1
解决办法
2086
查看次数