Как добавить валидацию в частичное в Rails 3? - PullRequest
1 голос
/ 16 февраля 2011

Это ошибка, которую я получаю:

ArgumentError in Home#index

Showing /app/views/clients/_form.html.erb where line #6 raised:

You need to supply at least one validation
Extracted source (around line #6):

3:   render :partial => "clients/form", 
4:          :locals => {:client => client}
5: -%>
6: <% client ||= Client.new 
7:    new_client = client.new_record? %>
8: <%= form_for(client, :html => { :class=>"ajax-form", :id => "client-ajax-form"}, :remote => true, :disable_with => (new_client ? "Adding..." : "Saving...")) do |f| %>
9:  <div class="validation-error" style="display:none"></div>

Моя модель клиента выглядит следующим образом:

class Client < ActiveRecord::Base
  # the user model for the client
  belongs_to :user

  has_many :projects, :order => 'created_at DESC', :dependent => :destroy

  #The following produces the designers for a particular client.
  #Get them from the relations where the current user is a client.
  has_one :ownership, :dependent => :destroy

  has_one :designer, :through => :ownership


  validates :name, :presence => true,
                   :length => {:minimum => 1, :maximum => 128}

  validates :number_of_clients

  def number_of_clients
     Authorization.current_user.clients.count <= Authorization.current_user.plan.num_of_clients    
  end

end

Вот так выглядит app/views/client/_form.html.erb:

  <%# 
  Edit a single client
  render :partial => "clients/form", 
         :locals => {:client => client}
-%>
<% client ||= Client.new 
   new_client = client.new_record? %>
<%= form_for(client, :html => { :class=>"ajax-form", :id => "client-ajax-form"}, :remote => true, :disable_with => (new_client ? "Adding..." : "Saving...")) do |f| %>
    <div class="validation-error" style="display:none"></div>
      <div>
        <label for="client_name"><span class="icon name-icon"> </span></label>
        <input type="text" class="name" size="20" name="client[name]" id="client_name" value="<%=  client.name %>" >    <%= f.submit(new_client ? "Add" : "Save", :class=> "green awesome")%>
    </div>
<% end %>
<% content_for(:deferred_js) do %>
// From the Client Form
$('#client-ajax-form')
    .bind("ajax:success", function(evt, data, status, xhr){
    console.log("Calling Step View");
    compv.updateStepView('client', xhr);
});
<% end %>

Как мне исправить эту ошибку?

1 Ответ

5 голосов
/ 18 февраля 2011

Проблема вызвана следующей строкой в ​​вашей модели:

validates :number_of_clients

Когда вы используете validates (s в конце), вы должны следовать валидациям по умолчанию, как вы это делали с валидацией имени. Однако, когда вы используете пользовательский метод для проверки, вы должны использовать вместо него validate. Так что это должно работать:

validate :number_of_clients
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...