Rails 3.2提交has_many:通过表单触发器验证

时间:2012-10-10 18:24:06

标签: ruby-on-rails validation ruby-on-rails-3.2

奇怪的错误,我以前从未遇到过这个问题。如果我提交了多对多的表单,它会触发has_many:through关系中的一个模型的验证。当我取出验证时,表单提交确定。为什么验证会阻止has_many:通过表单提交?这是信息

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

在我的表单中创建路由我有一个ul div,我用它来拖放以下隐藏字段。那些隐藏的字段通过一系列客户循环。

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

我在Client类中有几个验证规则。当我注释掉所有表单时,表单正确提交。我已经逐一添加了验证,试图查看哪一个启动它,但所有验证似乎都给了我这个问题。

验证错误如下

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

这是一个表格,其中partial只是一个用于拖放的空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

另一个有用的测试是我添加了以下跳过验证的测试,但是这个结果现在跳过了我对Route模型的验证。

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

0 个答案:

没有答案