我有一个使用Rails 4.4的网站,用户可以在其中展示他们的待售物业。用户通过注册和上传来提供其属性的数据和图片,然后管理员验证数据并询问用户是否可以在批准数据并使其生效之前使数据生效。
我想允许用户返回并编辑或添加新数据。例如,用户可能想要添加新图片或更新其属性的地址。
如何让用户在不实际上线的情况下编辑实时数据?
我应该维护两个独立的数据库 - 一个用于只读和实时数据,另一个仅用于编辑(这是实时的精确复制品)?即使我创建了两个数据库,如何更新更新的数据并将其添加到生产中?
答案 0 :(得分:0)
我会通过将已编辑的字段存储为具有更新链接属性的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?
属性在相关修改上显示“待定”标记