【问题标题】:before_create not invoked when object created创建对象时未调用 before_create
【发布时间】:2015-06-12 18:49:31
【问题描述】:

我有一个租赁模型:

class Lease < Sequel::Model
    def before_create
        self.issued_date = DateTime.now
        self.return_date = DateTime.now + 2.weeks
        super
    end
end

用户模型:

class User < Sequel::Model
    many_to_many :items, left_key: :user_id, right_key: :item_id,
                 join_table: :leases
end

和物品型号:

class Item < Sequel::Model
    many_to_many :users, left_key: :item_id, right_key: :user_id,
                 join_table: :leases
end

我的租赁模型有 user_iditem_id 作为外键。

当我创建一个 Lease 对象时,issued_datereturn_date 被创建并保存在数据库中,但是,当我为一个用户分配一个项目时,一个租约对象被创建但 before_create 没有被调用,导致issued_datereturn_date 设置为零。

【问题讨论】:

  • 您能否再描述一下,您如何将user_iditem_id 分配给lease 模型?
  • 什么是many_to_many?你的意思是has_and_belongs_to_many?或者这是来自某种 gem,还是你自己的代码?
  • 我正在使用 Sequel。 github.com/jeremyevans/sequel@nathanvda
  • 啊,对:我应该看到了 :) 我知道 has_and_belongs_to_many 的连接模型是隐式的,因此内部的任何代码(如果已定义)都会被忽略。当您在 ActiveRecord 中使用显式连接模型(使用 has_many :through)时,它确实有效。您正在使用显式连接模型,所以我想这是续集中的疏忽/错误/功能?我希望有人能提供更好的帮助。

标签: ruby-on-rails ruby sequel


【解决方案1】:

你需要像这样设置你的 before_create 方法:

before_create :before_create_method

def before_create_method
  #method body
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2020-12-07
    相关资源
    最近更新 更多