对于Rails来说是超级新手,但是可以在迁移中从模型中调用方法吗?
让我们说我有一个看起来像这样的模型:
class Orders < ApplicationRecord
def order_size
Order.where(item_id: 1).count
end
def order_level (order_size)
if order_size =< 2
Order.update_all(customer_level: "Bronze")
elsif order_size >= 3 && order_size < 6
Order.update_all(customer_level: "Silver")
elsif order_size >= 6
Order.update_all(customer_level: "Gold")
end
end
end
我可以运行仅更新某些尺寸订单的迁移,例如:
class SomeMigration < ActiveRecord::Migration
def change
if order_size == 10
(call/do order_level)
end
end
end
仅出于上下文考虑,我实现了一个单独的功能,当使用customer_level
创建新订单时,该功能将自动更新订单的order_level
,但是我需要返回并更新所有订单已经存在。在这种情况下,我只真正关心10个以上的订单。
希望这是有道理的,并不完全荒谬!
谢谢
答案 0 :(得分:0)
是否可以在迁移中从模型中调用方法?
是的。如the docs, section 8 Migrations and Seed Data所示,您可以在迁移中调用模型方法。这是来自文档的示例代码:
class AddInitialProducts < ActiveRecord::Migration[5.0]
def up
5.times do |i|
Product.create(name: "Product ##{i}", description: "A product.")
end
end
def down
Product.delete_all
end
end
这是一个好主意还是一个单独的问题。