Итак, у меня есть модель проекта и пользовательская модель. Каждый пользователь принадлежит к плану - это ограничивает количество проектов, которые они могут иметь (т.е. plan_id = '1' может иметь 1 проект, plan_id = '2' может иметь 3 проекта и т. Д.).
Я думаю, что выяснил, как сделать фактическое ограничение (то есть в модели проекта я делаю validate: custom_method, а затем определяю метод).
Проблема в том, что мне нужно сослаться на текущего вошедшего в систему пользователя - то есть current_user.
Как мне это сделать, учитывая мой код ниже?
Projects Controller
def create
@project = current_user.projects.build(params[:project])
if @project.save
respond_with(@project, :status => :created, :location => @project) do |format|
flash.now[:notice] = 'Project was successfully created.'
format.html { redirect_to(@project) }
format.js { render :partial => "projects/show", :locals => {:project => @project}, :layout => false, :status => :created }
end
else
respond_with(@project.errors, :status => :unprocessable_entity) do |format|
format.js { render :json => @project.errors, :layout => false, :status => :unprocessable_entity }
format.html { render :action => "new" }
end
end
end
end
Project.rb
# == Schema Information
# Schema version: 20110131093541
#
# Table name: projects
#
# id :integer not null, primary key
# name :string(255)
# description :string(255)
# notified :boolean
# created_at :datetime
# updated_at :datetime
# client_id :integer
#
class Project < ActiveRecord::Base
has_and_belongs_to_many :users
belongs_to :client
has_many :stages, :dependent => :destroy, :order => 'created_at DESC'
has_many :comments
validate :number_of_projects
def number_of_projects
current_user.projects.count <= current_user.plan.num_of_projects
end
end
User.rb
# == Schema Information
# Schema version: 20110214082231
#
# Table name: users
#
# id :integer not null, primary key
# {edited for brevity}
# plan_id :integer
#
class User < ActiveRecord::Base
before_create :assign_to_trial_plan
has_and_belongs_to_many :projects
#{edited for brevity}
belongs_to :plan
def role_symbols
roles.map do |role|
role.name.underscore.to_sym
end
end
def space
total_size = 0
if self.uploads.count > 0
self.uploads.each do |upload|
total_size += upload[:image_file_size]
end
end
total_size
end
def assign_to_trial_plan
self.plan_id = '5' #make sure to update this if the Trial plan ID ever changes
end
end