Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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 如何触发一个";“已完成”;属性,当表单完成时?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何触发一个";“已完成”;属性,当表单完成时?

Ruby on rails 如何触发一个";“已完成”;属性,当表单完成时?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个rails模型,它由一个很长的表单填充(使用邪恶向导gem分割) 有一些验证,但我允许大多数字段为空 如果模型已保存,但某些字段仍为空(例如,请记住用户填写表单),则我需要执行某些操作;如果表单100%完成,则需要执行某些其他操作(例如,向用户发送电子邮件,让他知道表单已完成) 我的想法是触发一个虚拟属性,例如:如果我的模型中没有空白字段,则触发complete,但我不确定如何以及在何处触发 有什么提示吗 ========================= 编辑 感谢@Kzu的建议,我发

我有一个rails模型,它由一个很长的表单填充(使用邪恶向导gem分割)

有一些验证,但我允许大多数字段为空

如果模型已保存,但某些字段仍为空(例如,请记住用户填写表单),则我需要执行某些操作;如果表单100%完成,则需要执行某些其他操作(例如,向用户发送电子邮件,让他知道表单已完成)

我的想法是触发一个虚拟属性,例如:如果我的模型中没有空白字段,则触发complete,但我不确定如何以及在何处触发

有什么提示吗

========================= 编辑

感谢@Kzu的建议,我发现它可以在我的向导控制器上工作(但也可以在对象控制器本身上工作)


例如,您可以为该表单使用ActiveRecord回调和完整的布尔字段

before_save :check_if_complete
def check_if_complete
    # self.attributes returns a hash including the attribute name as key and its value as value
    completion = self.attributes.select{|key,value| value.nil? or value.blank?} ? false : true
    self.complete = completion
end

此解决方案可以工作,但要注意数据库中的不同属性类型。

由于某些原因,在保存之前将其放入会阻止向导进入下一步。如果你看我的编辑,我让它在控制器中工作,并做了一些小的调整。我使用了| value.present,因为value.blank在假布尔值上返回true,因此完整属性本身将阻止其工作。我还加了。有吗?否则,空数组将返回true。谢谢你的帮助!
before_save :check_if_complete
def check_if_complete
    # self.attributes returns a hash including the attribute name as key and its value as value
    completion = self.attributes.select{|key,value| value.nil? or value.blank?} ? false : true
    self.complete = completion
end