【问题标题】:RoR callback after_createRoR 回调 after_create
【发布时间】:2018-12-30 13:46:12
【问题描述】:

我有 2 个模型用户和个人资料

class User < ApplicationRecord 
  has_one :profile
  after_create :create_profile
end

class Profile < ApplicationRecord
  validates :first_name, :last_name, presence: true
  belongs_to :user
end

我的问题是

after_create: create_profile

不起作用,因为没有通过验证。 rail 是否有 after_create: create_profile!after_create (validate: false): create_profile 来跳过验证?

【问题讨论】:

    标签: ruby-on-rails validation callback


    【解决方案1】:

    After_create 将在控制器而不是模型中工作。 在控制器中创建一个方法,该方法在 after_create 操作上被调用。 在该方法中调用 Model 方法来创建配置文件。 跳过验证并不好,但如果你愿意,你仍然可以这样做。 在配置文件模型中,您可以添加一个标志以跳过此方法的调用验证。

    【讨论】:

    • 如果我在 Profile 模型中删除验证,after_create 将在 User 模型中工作
    • 是的,但这不是正确的方法。最好有一个标志来跳过验证
    【解决方案2】:
      after_create :create_profile!
    
      private
      def create_profile!
        profile = Profile.new(user_id: self.id)
        profile.save(validate: false)
      end
    

    我尝试过这样做。
    另一个解决方案是为数据库设置默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多