gpt4 book ai didi

ruby-on-rails - 有没有办法在 rails 中停止这个默认插入

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:05 24 4
gpt4 key购买 nike

好的,所以我有这个数据结构

class User < ActiveRecord::Base
has_many :companies, :through => :positions
has_many :positions

class Company < ActiveRecord::Base
has_many :positions
has_many :users, :through => :positions

class Position < ActiveRecord::Base
belongs_to :company
belongs_to :user
attr_accessible :company_id, :user_id, :regular_user
end

还有我的数据库结构

create_table "positions", :force => true do |t|
t.integer "company_id"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "regular_user", :default => true
end

如果我将另一家公司添加到用户公司,则 regular_user 标志始终设置为 true

1.9.3-p125 :013 > @user.companies << Company.last
Company Load (0.3ms) SELECT `companies`.* FROM `companies`
ORDER BY `companies`.`id` DESC LIMIT 1
(0.0ms) BEGIN
SQL (0.2ms) INSERT INTO `positions`
(`company_id`, `created_at`, `regular_user`, `updated_at`, `user_id`)
VALUES
(263, '2012-07-25 13:56:56', 1, '2012-07-25 13:56:56', 757)

有没有办法在插入前将标志设置为false

我一直在通过这样做来绕过它....这是 hackish

@user.positions.update_all(:regular_user => false) if @user.is_admin?

是否有另一种方法(更清洁)来实现这一点

最佳答案

使用before_save 过滤器。
例如:

class Position

before_save :set_regular_user_to_false

def set_regular_user_to_false
self.regular_user = false
end

end

正如过滤器名称所说,这将在保存 position 对象之前拦截事件链,因此您可以更改 regular_user 属性。

编辑

def set_regular_user_to_false
if self.user.user_type != 'admin'
self.regular_user = false
end
true
end

关于ruby-on-rails - 有没有办法在 rails 中停止这个默认插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com