1

error_messages.html.erbカスタム検証を構築するときに、部分的な表示に問題があります。

たとえば、次のように始まるトランザクションを行うためのフォームがあります。

<%= form_for @transaction do |f| %>
  <%= render 'shared/error_messages', :object => f.object %>

ユーザーが自分自身と取引を行うことを防止する検証があります。

validate :self_transaction_not_possible

    def self_transaction_not_possible
      bel = Belonging.find_by_id(self.belonging.id)
      unless bel.nil?
        if self.user_id == bel.user_id
          errors.add(:base, "You cannot perform a transaction with yourself")
        end
      end
    end 

次に、そのような例をブラウザーで実行し (自分が所有するものでトランザクションを開始します)、self_transaction_not_possible 内にデバッガーを配置しました。検証が行われることを確認しましたが、実際、デバッガー内で次のように入力していることがわかります。

オブジェクトが有効ではなかったので、ビューにエラー メッセージが表示されることを期待していましたが、そうではありませんでしたerror_messages.html.erb。 ...

ユーザーは、保存プロセスが失敗したときに表示されるはずのページにリダイレクトされます (検証が正しく実行されました) が、エラー メッセージは表示されません ...

明らかな何かが欠けていますか?...

4

1 に答える 1

1

OK ...失敗した理由は、トランザクションが保存されていないときにコントローラで REDIRECT_TO を実行していたため、@transaction.errorsベクトルが削除されたためです...

これをrender :template => 'transactions/edit'解決した問題に変更する..

もちろん、質問を見て推測するのは困難でした:-/ ...

于 2012-09-25T12:31:02.647 に答える