奇怪的错误,我以前从未遇到过。如果我提交多对多表单,它会触发对 has_many :through 关系中的模型之一的验证。当我取出验证时,表单提交正常。为什么验证会阻止 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
在我创建路线的表单中,我有一个 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
以下是部分只是用于拖放的空 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)