gpt4 book ai didi

ruby-on-rails - 在 Rails 中使用 PaperTrail 批准/拒绝编辑

转载 作者:行者123 更新时间:2023-12-04 05:53:02 29 4
gpt4 key购买 nike

到目前为止,这是我的代码:

class Video < ActiveRecord::Base
has_paper_trail meta: { athlete_id: :athlete_id, approved: false },
if: Proc.new { |v| v.needs_approval? }
validate :should_be_saved?

def should_be_saved?
errors.add(:base, 'added for approval') if needs_approval?
end

def needs_approval
@needs_approval ||= false
end

def needs_approval?
@needs_approval
end

end

# ApplicationController
class ApplicationController < ActionController::Base

def user_for_paper_trail
return unless user_signed_in?
original_user.present? ? original_user : current_user
end

# Used to determine the contributor
# When contributor logs in, warden saves the contributor_id in session
def original_user
return nil unless remember_contributor_id?
@original_user ||= User.find(remember_contributor_id)
end

def info_for_paper_trail
{ athlete_id: current_user.id } if current_user
end

end

我目前遇到的问题是当保存视频对象时验证失败(因为我也告诉过它),但我需要验证失败但版本对象继续创建。只是不太确定该怎么做。

编辑
这是我的代码(下面的代码仍然使用上面的 ApplicationController 代码):

class Video < ActiveRecord::Base
# .. other methods

include Contributable
attr_accessible :video_type_id, :athlete_id, :uploader_id, :created_at, :updated_at, :uniform_number, :featured,
:name, :panda_id, :date, :thumbnail_url, :mp4_video_url, :from_mobile_device, :duration, :sport_id,
:delted_at, :approved
end

module Contributable
extend ActiveSupport::Concern

included do
has_paper_trail meta: { athlete_id: :athlete_id, approved: false },
unless: Proc.new { |obj| obj.approved? },
skip: [:approved]
end

def log_changes_or_update(params, contributor = nil)
update_attribute(:approved, false) unless contributor.blank?

if contributor.blank?
update_attributes params
else
self.attributes = params
self.send(:record_update)
self.versions.map(&:save)
end
end

end

class VideosController < ApplicationController
def update
# ... other code
# original_user is the contributor currently logged in
@video.log_changes_or_update(params[:video], original_user)
end
end

我正在开发的应用程序有一个小的复杂层,允许具有特定角色的用户编辑他们也有访问权限的配置文件。我试图在不影响现有对象的情况下保存每个更改的版本(使用 paper_trail)。

上面的代码完全符合我的要求,但是,我只是想知道我的 log_changes_or_update 方法是否不是实现总体目标的正确方法。

最佳答案

为什么不直接删除验证并向 Video 模型添加一个默认值为 falseapproved 属性?这样就保存了 Video 对象并创建了 paper_trail version。稍后当视频获得批准时,paper_trail 也会注意到这一变化。

关于ruby-on-rails - 在 Rails 中使用 PaperTrail 批准/拒绝编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249340/

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