gpt4 book ai didi

ruby-on-rails - 你如何让一个对象观察/订阅自己来观察某个领域?

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:28 25 4
gpt4 key购买 nike

在我的观察者中,我正在尝试为产品编写一个方法来“查看自身”,然后找到相同的产品,其中 :price 字段是唯一的区别。换句话说,如果用户订阅了更低价格的产品,我会尝试通知他们。

这是我的产品表:

create_table :products do |t|
t.string :name
t.decimal :price
t.integer :user_id
t.integer :store_id
t.boolean :watch_price
end

然后我有我的观察者:

class ProductObserver < ActiveRecord::Observer
def after_update(product)
if product.watch_price

end
end
end

因此,如果 bool 值 :watch_price 为真,则表示用户已订阅该产品。我把它放在 after_update(product) 中,因为我希望用户能够选择 watch_price 复选框,然后它会立即执行 Cron 作业,然后每隔一小时执行一次 Cron 作业在数据库上。

我遇到的问题是让产品 self 评估并搜索与唯一相同的产品,唯一的区别是 :price 字段。这将如何完成?

提前致谢,新手需要一些帮助!

最佳答案

建立订阅机制/关系。可以做很多工作来提高下面示例的性能并使其更加模块化,但您应该明白这一点。

app/models/product.rb

class Product < ActiveRecord::Base
has_many :subscriptions
has_many :subscribers, :through => :subscriptions, :class_name => 'User'
end

app/models/user.rb

class User < ActiveRecord::Base
has_many :subscriptions
has_many :products, :through => :subscriptions

def notify_of_price_drop(product, original_price)
# notify somehow
end
end

app/models/subscription.rb

class Subscription < ActiveRecord::Base
# be sure to add snapshot_price field to the subscriptions table in your migration
belongs_to :product
belongs_to :subscriber, :class_name => 'User'
end

app/models/product_observer.rb

class ProductObserver < ActiveRecord::Observer
def after_update(product)
product.subscriptions.each do |subscription|
if subscription.snapshot_price < product.price
subscription.user.notify_of_price_drop(product, subscription.snapshot_price)
end
end
end
end

关于ruby-on-rails - 你如何让一个对象观察/订阅自己来观察某个领域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831934/

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