在Rails迁移中从模型调用方法?

时间:2018-07-12 00:05:05

标签: ruby-on-rails ruby

对于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个以上的订单。

希望这是有道理的,并不完全荒谬!

谢谢

1 个答案:

答案 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

这是一个好主意还是一个单独的问题。