model中自带的update和create(update和create都是在controller中对数据表类的调用)是相当于对每一个params的值和其对应数据库同名的字段进行等号操作
!!!重要::所以页面接受值存入数据库 html中标签接受数据库所要的数据时属性name要与该数据库的字段一一对应
!!!重要::所以在model中定义字段的等号操作,相当与在controller中对数据表类进行update和create操作时(params相应字段存入数据库等号操作)可以自定义一个逻辑筛选,但在该函数中必须对数据进行保存或更新,因为自定义等号操作rails就不帮你进行保存了。
!!!重要::等号操作是 数据库字段 = params[对应数据库字段一样名字的] 所以在model中定义等号操作时注意
####传入参数image实际是params完整性定义(params.require(:subject).permit(:user_id, :title, :description, :subject_type, :position, :status, :photo,body_data: [:content, :photo, :origin_url, :medium_url, :width, :height]))的对应的params[:photo]
####params完整性定义的符号名是数据库字段的子集, 名字最好相同, 否则得在等号操作update, create中进行更改
def photo=(image)
photo = self.photo
if photo.present?
photo.update(image: image)
else
Photo.create(content_id: self.id, content_type: self.class.name, image: image, position: 9999)
end
end
#####传入参数params实际是params完整性定义(params.require(:subject).permit(:user_id, :title, :description, :subject_type, :position, :status, :photo,body_data: [:content, :photo, :origin_url, :medium_url, :width, :height]))的对应的params[:body]
def body_data=(params)
new_body = []
if params.present?
params.each do |f|
if f["content"].present?
new_body << {type: "text", content: f[:content]}
else
if f["photo"].present?
photo = Photo.create(content_id: self.id, content_type: self.class.name, image: f["photo"])
new_body << {type: "photo",