2

我有一个由很长的表格填充的 rails 模型(使用 wicked-wizard gem 拆分)。

有一些验证,但我允许在大多数字段中留空。

如果模型已保存但某些字段保持空白(例如记住用户填写表单),我需要采取某些操作,如果表单 100% 完成,我需要采取一些其他操作(例如向用户发送电子邮件让他知道表格是完整的)。

我的想法是触发一个虚拟属性,例如 :complete 如果我的模型中没有空白字段,但我不确定如何以及在哪里执行此操作。

有什么提示吗?

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

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

  def update
    @customer = current_user.customer
    params[:customer][:complete] =  @customer.attributes.select{|key,value| value.nil? or !value.present? }.any?  ? false : true
    @customer.attributes = params[:customer]
    render_wizard @customer
  end
4

1 回答 1

1

例如,您可以为此表单使用 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

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

于 2012-12-19T14:53:58.583 回答