2011-10-06 68 views
0

可以在Rails中插入行并将id的值分配给特定列,例如如果我有表,该表具有ID和LINK列,其中LINK是链接到同一个表:在列中插入与主键相同值的列

ID | LINK 
1 | 1 
2 | 1 
3 | 1 

插入列2和3是容易的,但是是否有任何方式插入单INSERT语句列1?

这是可能通过rails语法或我需要自定义SQL(在PostgreSQL)?

[当然,这可以用INSERT/UPDATE完成,但我需要在这个表上禁用更新]

TX Zaharije

回答

0

这是一个自连接表。你不需要自己编写SQL。只是在模型中定义这种关系像这样:

class Employee < ActiveRecord::Base 
    has_many :subordinates, :class_name => "Employee" 
    belongs_to :manager, :class_name => "Employee", 
    :foreign_key => "manager_id" # or what you call LINK 
end 

此外,链接可能不是一个很好的列名,尽量挑选东西,如果你能更多的描述。

+0

这不是问题。问题是,当我想要插入新的雇员这是自我经理:emp = Employee.new({:manager_id => emp.id})我需要经理是自己的经理(不适合雇用的情况下),并插入在单个INSERT语句中。我可以这样做:emp = Employee.new()emp.save emp.manager = emp emp.save但是,这将触发INSERT和UPDATE(2语句)。我需要在一个声明中执行。只有这样我才能看到的是创建自定义SQL(PostgreSQL数据库)nextval和currval的值和MANAGER_ID – Zaharije

+0

您可以使用像before_save或after_create回调设置自加入外键,但它仍然将不得不插入新行以获取ID,然后执行更新。或者,您可以在MySQL中查询下一行ID,但这是不可靠的,也是一个坏主意。你是否预优化以避免2次更新? – squarism

+0

有点过时了 - 我们有存储金钱交易的DB,我们不想允许任何种类的更新。由于我伤心过时 - 我们重组了数据库,并没有同样的问题。 TX。 – Zaharije

相关问题