如何更新rails中空列的值

Posted

技术标签:

【中文标题】如何更新rails中空列的值【英文标题】:how can update the value of null column in rails 【发布时间】:2021-11-07 18:52:35 【问题描述】:

我正在尝试针对一个项目创建多个错误,但它在 edit_task_params 中显示错误

  param is missing or the value is empty: project

当我创建项目时,bug_id 为空,我只想为项目添加错误 ID,但我不知道如何解决这个问题。

项目模型

class Project < ApplicationRecord
   has_many :bugs
end

错误模型 类错误

错误控制器

class BugController < ApplicationController
    
    def new
      @bug = Bug.new
    end

    def create

      parameters = bug_params.merge( user_id: current_user.id )   

      @bug = Bug.new(parameters)
      parameter = edit_task_params.merge( bug_id: @bug.id )
      @project = Project.find(params[:project_id])
      @project = Project.update( parameter)
      respond_to do |format|
        if @bug.save
          @project = Project.find(params[:project_id])
          @project.update(edit_task_params)
          format.html  redirect_to new_bug_path, flash:  success: "bug added" 
        else
          format.html  render :new 
        end
      end
   end

 private
 def bug_params
     params.require(:bug).permit(:title, :description, :screen_shot, :typeOf, :status_is, :deadline, :user_id, :project_id )
 end

 def edit_task_params
     params.require(:project).permit(:bug_id)
 end

结束

【问题讨论】:

【参考方案1】:

首先,我们需要看看你解决问题的方法是否足够好?

为什么Project 模型需要存储bug_id

要回答这个问题,我们需要考虑one_to_many 关系是如何工作的。

我们说

一个项目有很多Bug 许多错误属于一个项目

想到了两种方法

    我们应该将错误 ID 存储到项目表中|型号 我们应该把 project_id 放到 bugs 表中 |型号

它将如何使我们的项目表看起来像

如您所见,我们必须存储多个 bugs_ids 值 因为单个项目可能有很多错误 并且不推荐这种结构,因为它违反了第一个规范化。所以被忽略了

现在我们转向第二种方式

所以我们将使用这种方法

现在回到 Rails 和您的解决方案

1- Project 模型中不需要 bug_id,因此请将其删除。 2-您不需要在创建错误时更新Project 也删除该部分。 3-您不应该在我假设您尝试执行的创建方法中执行更新。

因此,在执行必要的更正后,您的代码将如下所示。

parameters = bug_params.merge( user_id: current_user.id )   

bug = Bug.new(parameters)
if bug.save
  format.html  redirect_to new_bug_path, flash:  success: "bug added" 
else
  format.html  render :new 
 end

您可以通过这种方式使用项目访问您的错误

bugs = Project.find(project_id).bugs

您需要创建一个单独的方法来更新和编辑。

【讨论】:

以上是关于如何更新rails中空列的值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自另一个表列的值优化列的更新?

thinkphp curd操作问题 更新时如何让a列的值等于b列的值

mysql如何根据一列值更新另一列的值?

如果值为空,如何在单个查询中更新列的值,然后使用前一个非空值进行更新[重复]

如何改进rails中更新多个属性的rails代码

如何根据条件(组中的值)更新列?