0

奇妙なエラーと私はこれまでこれに遭遇したことがありません。多対多のフォームを送信すると、has_many:through関係にあるモデルの1つに対して検証がトリガーされます。検証を行うと、フォームは正常に送信されます。検証によってhas_many:throughフォームの送信が妨げられるのはなぜですか?ここに情報があります

class Client
  has_many :client_routes
  has_many :routes, :through => :client_routes
  #plus many validations below
end

class Route
  has_many :client_routes
  has_many :clients, :through => :client_routes
end

class ClientRoute
  belongs_to :client
  belongs_to :route

ルートを作成するためのフォームには、次の非表示フィールドでドラッグアンドドロップに使用するuldivがあります。これらの隠されたフィールドは、クライアントの配列を介してループされます。

<%= hidden_field_tag("route[client_ids][]", c.id) %>

Clientクラスにはいくつかの検証ルールがあります。すべてコメントアウトすると、フォームは正しく送信されます。検証を1つずつ追加して、どれがトリップするかを確認しましたが、すべての検証で問題が発生するようです。

検証エラーは次のとおりです

1 error prohibited this route from being saved:
There were problems with the following fields
Clients is invalid

パーシャルがドラッグアンドドロップ用の空のulであるフォームは次のとおりです。

<%= form_for Route.new, :remote => true do |f| %>

  <p>
    <%= f.label :name %>    <br/>
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :mileage %> <br/>
    <%= f.text_field :mileage %>
  </p>
  <p>
    <%= f.label :rate %>         <br/>
    <%= f.text_field :rate %>
  </p>
  <p>
    <%= f.submit %>
  </p>
  <div class="assign_clients">
    <%= render :partial => "client_routes" %>
  </div>

<% end %>

これがコントローラーの作成アクションです

def create
  @route = Route.new(params[:route])
  if @route.save
    respond_with @route, :location => routes_url
  else
    flash[:notice]= "Not saved due to your incompetence"
  end
end

ちょっとうまくいく別のテストは、検証をスキップする以下を追加したことですが、この結果は、ルートモデルに対して持っている検証をスキップするようになりました。

if @route.save(:validation => false)   
4

0 に答える 0