를 거부 :승인 레일에 PaperTrail 사용/여기 내 코드는 지금까지입니다 편집
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
메서드가 전체 목표를 달성하는 올바른 방법이 아닌지 궁금합니다.
도움 주셔서 감사합니다. 이것은 정확히 내가 끝내었던 것이다! 감사! – dennismonsewicz
다행 이군! – jcm
내가 작업하고 있던 새로운 코드를 포함하도록 내 질문을 업데이트했습니다. 생각? – dennismonsewicz