사용자가 자신의 부동산을 판매용으로 전시 할 수있는 Rails 4.4를 사용하는 웹 사이트가 있습니다. 사용자는 등록 및 업로드를 통해 자산의 데이터와 사진을 제공 한 다음 관리자가 데이터를 확인하고 데이터를 승인하고 게시하기 전에 데이터를 게시 할 수 있는지 사용자에게 묻습니다.
사용자가 돌아와서 새 데이터를 편집하거나 추가 할 수 있도록하고 싶습니다. 예를 들어 사용자는 새 사진을 추가하거나 자산의 주소를 업데이트 할 수 있습니다.
사용자가 실제로 라이브로 전환하지 않고 라이브 데이터를 편집 할 수 있도록하려면 어떻게해야합니까?
두 개의 별도 데이터베이스를 유지해야합니까? 하나는 읽기 전용 및 라이브 데이터 용이고 다른 하나는 편집 용 전용입니다 (라이브의 정확한 복제본)? 데이터베이스를 두 개 만들더라도 업데이트 된 데이터를 어떻게 업데이트하고 프로덕션에 추가 할 수 있습니까?
approve
연결된 속성을 업데이트 하는 작업이 있는 별도의 스키마로 편집 된 필드를 저장하여 이에 접근 합니다.
이것은 부분적으로 불완전한 / 의사 코드입니다. 자신의 작업에 대한 책임은 귀하에게 있습니다.
모델 :
class PropertyEdit
belongs_to :property
belongs_to :reviewer, class_name: 'Admin'
enum :state, [ :pending, :approved, :cancelled ]
def approve_changes(admin)
if property.update { field_name => suggested_value }
self.reviewer = admin
approved!
else
# Handle error
end
end
end
class Property
has_many :property_edits
end
속성 업데이트를 처리하기위한 컨트롤러 메서드 :
class PropertiesController < ApplicationController
def edit
@property = Property.find(params[:id])
end
def update
@property = Property.find(params[:id])
@property.attributes = property_update_params
if @property.valid?
@property.changes.each do |attribute, (old, new)|
edit = @property.property_edits.new({
field_name: attribute,
previous_value: old,
suggested_value: new
})
edit.save
end
flash[:success] = "Your updates will be live once approved."
redirect_to property_path(@property)
else
render :edit
end
end
protected
def property_update_params
params.require(:property).permit(:price, :address, :city)
end
end
편집 검토를 처리하기 위해 이제 한 번에 승인 할 수있는 단일 편집과 모든 변경 사항에 대한 로그가 있습니다.
엣지 케이스와 커뮤니케이션을 처리하는 로직을 추가하고 싶을 것입니다.
_changed?
속성을 사용 하여 관련 편집에 "보류중인"태그 표시이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다