ruby on rails मान लें कि किसी ऑब्जेक्ट में एक या अधिक संबद्ध ऑब्जेक्ट हैं




ruby-on-rails validation (3)

मुझे यह सुनिश्चित करने की ज़रूरत है कि जब कोई उत्पाद बनाया जाता है तो इसमें कम से कम एक श्रेणी होती है मैं यह एक कस्टम सत्यापन वर्ग के साथ कर सकता था, लेकिन मैं उम्मीद कर रहा था कि ऐसा करने का एक और मानक तरीका था।

class Product < ActiveRecord::Base
  has_many :product_categories
  has_many :categories, :through => :product_categories #must have at least 1
end

class Category < ActiveRecord::Base
  has_many :product_categories
  has_many :products, :through => :product_categories
end

class ProductCategory < ActiveRecord::Base
  belongs_to :product
  belongs_to :category
end

Wpgreenway के समाधान के बजाय, मैं पहले के रूप में एक हुक विधि का उपयोग करने का सुझाव देता हूं और has_and_belongs_to_many एसोसिएशन का उपयोग करें।

class Product < ActiveRecord::Base
  has_and_belongs_to_many :categories
  before_save :ensure_that_a_product_belongs_to_one_category

  def ensure_that_a_product_belongs_to_one_category
    if self.category_ids < 1 
      errors.add(:base, "A product must belongs to one category at least")
      return false
    else
      return true
    end
  end   

class ProductsController < ApplicationController
  def create
    params[:category] ||= []
    @product.category_ids = params[:category]
    .....
  end
end

और आपके विचार में उपयोग उदाहरण के लिए उपयोग कर सकते हैं options_from_collection_for_select


सुनिश्चित करता है कि इसमें कम से कम एक श्रेणी है:

class Product < ActiveRecord::Base
  has_many :product_categories
  has_many :categories, :through => :product_categories

  validates :categories, :presence => true
end

मैं त्रुटि संदेश का उपयोग कर रहा हूं :presence length minimum 1 सत्यापन की तुलना में :presence स्पष्ट है I


एक मान्यता है जो आपके एसोसिएशन की लंबाई की जांच करेगा। इसे इस्तेमाल करे:

class Product < ActiveRecord::Base
  has_many :product_categories
  has_many :categories, :through => :product_categories

  validates :categories, :length => { :minimum => 1 }
end




has-many-through