Rails 3-可以在数据库查询中创建IF

问题描述

|| 我有在论坛中注册的用户个人资料卡。
Person.update_all({:name => params[:person][:name],:sex => params[:person][:sex],:age => params[:person][:age],:avatar => params[:person][:avatar].original_filename,:city => params[:person][:city]},{:id => params[:id]})
这是用于更新数据库中数据的查询。但这是一个小问题-仅当用户通过表单头像(图像)发送时,这才适用。如果未发送头像,则表示用户已经上传了头像,并且该表格仅发送姓名,性别,年龄和城市。因此,在这种情况下,我会在行:avatar => params [:person] [:avatar] .original_filename中出错,-我想问您,如果存在某种优雅的方式,该如何处理这一刻。 我认为是这样的:
if params[:person][:avatar]
 avatar = \':avatar => params[:person][:avatar].original_filename,\'
end
Person.update_all({:name => params[:person][:name],avatar 
                   :city => params[:person][:city]},{:id => params[:id]})
但不幸的是,这行不通...您如何解决类似情况? 谢谢。     

解决方法

        好吧,好像您的params [:person]键与您的模型字段相似。那么,为什么不将
params[:person]
传递给
update_all
呢? 另外,您可以创建一个哈希值
person
,以所需的方式对其进行初始化,然后将其传递给
update_all
person = { :name => params[:person][:name],...
if params[:person][:avatar]
  person[:avatar] = params[:person][:avatar].original_filename
end

Person.update(params[:id],person)
我将
update_all
更改为
update
,因为
update_all
用于更新所有符合条件的记录,而
update
通过ID来查找记录。 但是,这又是一个不好的做法,您必须输入很多不必要的代码。 还有一件事。
update_all
进行直接DB调用,不涉及验证,回调等。 因此,如果您对此没有特殊原因,则最好执行以下操作:
@person = Person.find params[:id]
@person.update_attributes params[:person]
我真的认为,您应该检查一下这本书 再次更新:) 您会看到,这些东西属于您的模型,而不是控制器。您可以在模型中定义一个setter:
def avatar=(value)
  write_attribute(:avatar,value.original_filename)
end
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...