2

私は2つのモデルを持っています。UserWant。A User has_many: Wants.

Wantモデルには 以外user_idに 1 つのプロパティがありますname

Wantユーザーが同じ名前で 2 つのウォンツを作成するために送信できないように、モデルにカスタム検証を記述しました。

validate :existing_want

  private

    def existing_want
      return unless errors.blank?       
      errors.add(:existing_want, "you already want that") if user.already_wants? name
    end

already_wants?メソッドは User モデルにあります。

def already_wants? want_name
  does_want_already = false
  self.wants.each { |w| does_want_already = true if w.name == want_name }
  does_want_already
end

create検証仕様はモデル テストに合格しますが、次のアクションに複製を送信しようとすると、機能テストに失敗しWantsControllerます。

def create
    @want = current_user.wants.build(params[:want])
    if @want.save
      flash[:success] = "success!"
      redirect_to user_account_path current_user.username
    else
      flash[:validation] = @want.errors
      redirect_to user_account_path current_user.username
    end
  end

エラー: can't dump hash with default proc

私のコードにつながるスタック トレースはありません。

問題を次の行に絞り込みました。

self.wants.each { |w| does_want_already = true if w.name == want_name }

true私が望むようにエラーが私のビューに表示されているにもかかわらず、私がただ戻ってきた場合。

理解できない?どうしたの?そして、なぜそれはとても不可解なのですか?

ありがとう。

4

1 に答える 1