【发布时间】:2015-03-12 15:10:38
【问题描述】:
我正在使用 rails has_many_belongs_to_many 关联如下:
class MemberRole < ActiveRecord::Base
attr_accessible :org_id, :name, :permission_ids
has_and_belongs_to_many :permissions
end
class Permission < ActiveRecord::Base
has_and_belongs_to_many :member_roles
end
我的join表如下:
CREATE TABLE MEMBER_ROLES_PERMISSIONS
( member_role_id NUMBER(38,0) NOT NULL REFERENCES member_roles,
permission_id NUMBER(38,0) NOT NULL REFERENCES permissions
);
当我尝试按如下方式创建新记录时:
role = MemberRole.create(name: role_params["name"], org_id: role_params["org_id"], permission_ids: role_params["permission_ids"])
插入“MEMBER_ROLES”(“ID”、“NAME”、“ORG_ID”)值(:a1、:a2、 :a3) [["id", 66], ["name", "test100"], ["org_id", "2"]]
插入“MEMBER_ROLES_PERMISSIONS”(“MEMBER_ROLE_ID”, "PERMISSION_ID") 值 (66, 8)
上述方法的问题是我的 member_roles 表有如下创建的序列和触发器:
CREATE SEQUENCE MEMBER_ROLES_SEQ;
set define off;
CREATE OR REPLACE TRIGGER member_roles_bir
BEFORE INSERT ON MEMBER_ROLES
FOR EACH ROW
BEGIN
SELECT MEMBER_ROLES_SEQ.NEXTVAL
INTO :new.id
FROM dual;
END;
由于上述原因,表格中插入的“ID”是 67 而不是 66。
rails 是否应该尝试手动插入 id?有没有办法告诉 Rails 不处理 id 插入并让 oracle 触发器处理它?
【问题讨论】:
-
普通的 ActiveRecord 模型也会发生同样的事情吗?这可能是
has_and_belongs_to_many的一个怪癖,它是 Rails 第一个版本的产物。has_many :through是现在推荐的方法,因为它采用常规模型。 -
嗯。 has_and_belongs_to_many 非常适合我的用例。我会尝试深入挖掘一下,看看是否是关联的问题。
-
@tadman。我尝试了'has_many,通过:关联,它做同样的事情。
-
对常规模型有这种作用吗?如果是这样,那可能就是 Oracle 适配器的实现方式。
-
Rails 是否使用序列来计算手动值?还是别的什么?
标签: ruby-on-rails ruby oracle ruby-on-rails-3 rails-activerecord