![](/img/trans.png)
[英]How do I test for failure of (e.g.) @project.save in my controller using minitest in Rails?
[英]Rails - is “If @Project.save Else @Project.update” possible
我正在尝试使用一种形式来保存和更新一些数据。 基本上,如果项目已经存在,它将进行更新,但是如果它是新项目,则将创建一个新条目
有没有简单的方法可以编写def创建,以便在ProjectID参数为nil的情况下保存或更新它? 还是现在?
我现在所拥有的是
def create
@project = current_user.projects.build(project_params)
if @project.save
flash[:success] = "Project created!"
redirect_to root_url
else
flash[:success] = "Project not created!"
redirect_to root_url
end
结束
我可以在else语句中调用更新功能吗?
数据库架构
create_table "projects", force: :cascade do |t|
t.string "projectSubject"
t.string "projectType"
t.string "projectTitle"
t.string "projectWorth"
t.date "projectDueDate"
t.string "projectDetails"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
结束
您可以执行以下操作:
def create
@project = current_user.projects.where(id: params[:id]).first_or_create(project_params)
if @project.save
flash[:success] = "Project created!"
redirect_to root_url
else
flash[:success] = "Project not created!"
redirect_to root_url
end
end
指定您要查找的数据。 如果表中存在它,则将返回第一个实例。 如果不是,则调用create。
current_user.projects.where(id: params[:id])
-> 指定您要查找的数据
.first_or_create(project_params)
-> 如果表中存在它,则将返回第一个实例。 如果不是,则调用create。
您不需要.update
。 对于新记录或现有记录,保存将做正确的事情。 您需要调整第二行来查找或构建项目,尽管您将始终构建。
就是说,您为什么不拥有专用于更新的def update
方法,而只喜欢创建该方法呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.