2

非常に長いフォーム(邪悪なウィザードの宝石を使用して分割)で埋められたRailsモデルがあります。

いくつかの検証がありますが、ほとんどのフィールドで空白を許可します。

モデルが保存されている場合は特定のアクションを実行する必要がありますが、一部のフィールドは空白のままです(たとえば、ユーザーがフォームに入力することを忘れないでください)。フォームが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 に答える