Ruby on rails rails错误已添加到对象,但未引发
我正在更新一张表格。由于x原因,我无法在模型中添加验证,因此我在方法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
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