2013-10-02 1 views
1

Моделью, для которых я сделал валидации являются:проверки рельсов не работает в модели с использованием активного рекорда проверки

class DeliveryTimePerformer < ActiveRecord::Base 
    belongs_to :delivery_time 
    belongs_to :performer 
    validates :amount, numericality: { greater_than: 0 } 

end 
class ClipCategoryPerformer < ActiveRecord::Base 
    belongs_to :clip_category 
    belongs_to :performer 
    validates :amount, numericality: { greater_than: 0 } 
end 
class DeliveryTimePerformer < ActiveRecord::Base 
    belongs_to :delivery_time 
    belongs_to :performer 
    validates :amount, numericality: { greater_than: 0 } 

end 

Это HTML часть.

<label>Categories</label> 
      <% ClipCategory.all.each do |category| %> 
       <%= form_tag "update_amount", :remote => :true, :builder => Judge::FormBuilder do %> 
       <div class="span12"> 
       <div class="category_check pull-left" data-category="category_text_<%= category.id %>"> 
        <%= check_box_tag "category", 1, (@performer.clip_category_ids.include?(category.id) ? "checked" : false), :class => "pull-left" %> 
        <%= label_tag "category", category.name, :class => "pull-left category_label" %> 
       </div> 

       <% amount_val = ClipCategoryPerformer.where("clip_category_id = ? AND performer_id = ?", category.id, current_user.performer.id).first %> 
       <div id="category_text_<%= category.id%>" class="category_text span10 pull-right"> 
       <% if amount_val %> 
        <%= number_field_tag "amount", @amount, :class => "pull-left input-medium", :value => amount_val.amount,:validate => true %> 
        <% else %> 
        <%= number_field_tag "amount", @amount, :class => "pull-left input-medium", :value => nil,:validate => true %> 
        <% end %> 
        <%= hidden_field_tag "category_id", category.id %> 
        <%= submit_tag "Update" %> 
       </div> 
       </div> 
       <br /> 
       <% end %> 

      <% end %> 

     </div> 

Это только для ClipCategoryPerformer. Остальные модели имеют одинаковый код на одной странице. Они отправляются через ajax, используя следующий код:

def update_amount 
    #@ccp = ClipCategoryPerformer.create(:clip_category_id => params[:category], :performer_id => current_user.performer.id, :amount => params[:amount].to_f) 

    if params[:category] == "1" 
     puts "checked" 
     @ccp = ClipCategoryPerformer.create(:clip_category_id => params[:category_id], :performer_id => current_user.performer.id, :amount => params[:amount].to_f) 
    else 
     puts "unchecked" 
     #  d = ClipCategoryPerformer.find_by(:clip_category_id == params[:category] && :performer_id == current_user.performer.id) 
     d = ClipCategoryPerformer.where("clip_category_id = ? AND performer_id = ?", params[:category_id], current_user.performer.id) 

     d.destroy_all 
    end 
    #puts checkbox(category).checked 
    # rails.logger 
    respond_to do |format| 
     format.js { @ccp } 
    end 
    end 

Валидации не произойдет. Когда я нажимаю кнопку обновления. Он не проверяет, а добавляет значение. Что я делаю не так? Также я попытался использовать драгоценный камень judge. Но я не уверен, что это сработает, поскольку это само по себе не работает. Есть идеи?

+0

я вижу, вы используете 'to_f', может быть, попробовать' проверяет: количество, numericality: {greater_than: 0,0} ' – house9

+0

nope. Это все равно не сработает. Все еще принимает отрицательные значения. – Aravind

ответ

0

Как насчет попробовать это:

validates_numericality_of :amount, greater_than: 0, on: :update_amount 

Или вы могли бы попробовать убрав on: :update_amount

Смежные вопросы