Ну, во-первых, спасибо всем за большую помощь и проницательную дискуссию. :)
Я взял биты из ваших ответов, чтобы найти решение, которое я могу понять сам. Кажется, когда дело доходит до программирования, я могу понять только заявления, ничего более сложного. :(
То, что я сделал, было:
class Shop < ActiveRecord::Base
belongs_to :user
has_many :products, :dependent => :destroy
validate :is_account
def is_account
if account == 1 && products.size < 11
elsif account == 2 && products.size < 51
else account == 3 && products.size < 101
end
end
Затем в products_controller.rb я помещаю эти строки:
def new
if current_user.shop.nil?
flash[:notice] = I18n.t 'shops.create.must' #this should check is the user owns a shop, otherwise can't add a product. It seems to work, so far
redirect_to :action => :index
elsif current_user.shop.valid?
flash[:notice] = I18n.t 'shops.upgrade.must'
redirect_to :action => :index
else
@product = Product.new
end
end
Магазин теперь относится к типу 1 и имеет только 9 товаров, но всякий раз, когда я нажимаю ссылку "Новый продукт", я перенаправляюсь на / products с сообщением shops.upgrade.must.
Не знаю, похоже, что
account
в shop.rb не возвращает правильное значение. Этот столбец имеет тип int (11), поэтому я думаю, он может возвращать только число, но все же ...