繁体   English   中英

Rails-是否可能“如果@ Project.save其他@ Project.update”

[英]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

first_or_create文档中...

指定您要查找的数据。 如果表中存在它,则将返回第一个实例。 如果不是,则调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM