如何更新 rails 中空列的值
how can update the value of null column in rails
我正在尝试针对一个项目创建多个错误,但它在 edit_task_params
中显示错误
param is missing or the value is empty: project
当我创建项目时,bug_id 为空,我只想针对项目添加错误 ID,但我不知道如何解决此问题。
项目模型
class Project < ApplicationRecord
has_many :bugs
end
错误模型
class 错误 < ApplicationRecord
belongs_to:项目
结束
bug_controller
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
结束
首先要看你解决问题的方法是否足够好?
为什么Project
模型需要存储bug_id
?
要回答这个问题,我们需要考虑 one_to_many
关系是如何工作的。
假设
- 一个项目有很多Bug
- 许多错误属于一个项目
想到了两种方法
- 我们应该将错误 ID 存储到项目 table|型号
- 我们应该把 project_id 放在 bug table |型号
它将如何使我们的项目 table 看起来像
如您所见,我们必须存储 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
您需要创建一个单独的方法来更新和编辑。
我正在尝试针对一个项目创建多个错误,但它在 edit_task_params
中显示错误 param is missing or the value is empty: project
当我创建项目时,bug_id 为空,我只想针对项目添加错误 ID,但我不知道如何解决此问题。
项目模型
class Project < ApplicationRecord
has_many :bugs
end
错误模型 class 错误 < ApplicationRecord belongs_to:项目 结束
bug_controller
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
结束
首先要看你解决问题的方法是否足够好?
为什么Project
模型需要存储bug_id
?
要回答这个问题,我们需要考虑 one_to_many
关系是如何工作的。
假设
- 一个项目有很多Bug
- 许多错误属于一个项目
想到了两种方法
- 我们应该将错误 ID 存储到项目 table|型号
- 我们应该把 project_id 放在 bug table |型号
它将如何使我们的项目 table 看起来像
如您所见,我们必须存储 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
您需要创建一个单独的方法来更新和编辑。