Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails错误已添加到对象,但未引发_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails rails错误已添加到对象,但未引发

Ruby on rails rails错误已添加到对象,但未引发,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在更新一张表格。由于x原因,我无法在模型中添加验证,因此我在方法update中的projects\u controller中添加了一个错误。当我更新时,它应该会引发错误并render:edit,但它不会。这是我的方法 def update @project = Project.find(params[:id]) #stuff to update #add error if no legal_media checked, unless if creative upload it

我正在更新一张表格。由于x原因,我无法在模型中添加验证,因此我在方法
update
中的
projects\u controller
中添加了一个错误。当我更新时,它应该会引发错误并
render:edit
,但它不会。这是我的方法

def update
  @project = Project.find(params[:id])

  #stuff to update

  #add error if no legal_media checked, unless if creative upload its own conditions
  unless has_media?(@project.legal_option.authorized_format)
    @project.legal_option.authorized_format.errors[:base] << "error message"
  end

  if @project.update_attributes(project_params)
     redirect_to brief_path(@project.order.brief)
  else
    render :edit
  end
end

当我在开始时使用
validate:has_media?
My LegalOption.LegalMedia因为
legal_选项\u id
legal_media

中为
nil
时,在
块中,除非
否则请将行:

渲染:编辑并返回

比如:

除非有媒体(@project.legal\u option.authorized\u格式)

@
中的project.legal\u option.authorized\u format.errors[:base],除非
块中有错误,否则请在以下行中输入:

渲染:编辑并返回

比如:

除非有媒体(@project.legal\u option.authorized\u格式)

@project.legal\u option.authorized\u format.errors[:base]您应该向模型添加验证,以便
有效?
执行您希望它执行的操作


如果您查看文档,您将看到
valid?
只运行所有验证。它不会检查您手动添加到对象中的任何错误。

您应该向模型添加验证,以便
有效?
执行您希望它执行的操作


如果您查看文档,您将看到
valid?
只运行所有验证。它不会检查手动添加到对象中的任何错误。

Rails惯例规定,验证不应在控制器中实现,而应在模型中实现。更具体地说,
update\u attributes
仅在分配属性后运行
valid?
,属性本身仅运行在模型上定义的验证。模型上已经存在的任何错误都会事先清除

如果将其作为模型上的自定义验证重新编写,
update\u attributes
的行为应符合您的预期:

class Project < ActiveRecord::Base
  validate :legal_option_has_media
  private
  def legal_option_has_media
    unless has_media? legal_option.authorized_format
      errors.add :base, "error message"
    end
  end
end
class项目
Rails惯例规定,验证不应该在控制器中实现,而应该在模型中实现。更具体地说,
update\u attributes
仅在分配属性后运行
valid?
,属性本身仅运行在模型上定义的验证。模型上已经存在的任何错误都会事先清除

如果将其作为模型上的自定义验证重新编写,
update\u attributes
的行为应符合您的预期:

class Project < ActiveRecord::Base
  validate :legal_option_has_media
  private
  def legal_option_has_media
    unless has_media? legal_option.authorized_format
      errors.add :base, "error message"
    end
  end
end
class项目
添加到您的答案中,需要返回
才能停止执行添加到您的答案中,需要返回
才能停止执行我一开始想在模型中执行,但问题是:我有模型
法律媒体
(重命名为
授权格式
)其中有一个
属于与
LegalOption
关联的
。我想验证一个事实,即如果
legal\u option
custom\u document
列为
nil
,那么
validate:has\u media?
。但是由于
legal\u-option\u-id
legal\u-media
中的对象是
nil
(因为还没有在编辑方法中创建实例),我无法执行
legal\u-option。授权的\u-format
(与
legal\u-option.legal\u-media
相同)即使关联没有持久化,如果分配,它们仍然可以访问。您是说在自定义验证中,
legal\u选项
nil
?或者说,你特别犯了什么错误?如果
legal\u option.authorized\u format
legal\u option.legal\u media
相同,如何定义方法
authorized\u format
?也许您可以将自定义验证代码添加到问题中…感谢您的帮助,签出我问题中的更新部分。开始时我想在模型中执行此操作,但问题是:我有模型
LegalMedia
(已重命名为
authorized_format
)其中有一个
属于与
LegalOption
关联的
。我想验证一个事实,即如果
legal\u option
custom\u document
列为
nil
,那么
validate:has\u media?
。但是由于
legal\u-option\u-id
legal\u-media
中的对象是
nil
(因为还没有在编辑方法中创建实例),我无法执行
legal\u-option。授权的\u-format
(与
legal\u-option.legal\u-media
相同)即使关联没有持久化,如果分配,它们仍然可以访问。您是说在自定义验证中,
legal\u选项
nil
?或者说,你特别犯了什么错误?如果
legal\u option.authorized\u format
legal\u option.legal\u media
相同,如何定义方法
authorized\u format
?也许您可以将自定义验证代码添加到问题中…感谢您的帮助,请在我的问题中签出更新部分。
class Project < ActiveRecord::Base
  validate :legal_option_has_media
  private
  def legal_option_has_media
    unless has_media? legal_option.authorized_format
      errors.add :base, "error message"
    end
  end
end