Как передать current_user в мою модель в Rails 3? - PullRequest
0 голосов
/ 15 февраля 2011

Итак, у меня есть модель проекта и пользовательская модель. Каждый пользователь принадлежит к плану - это ограничивает количество проектов, которые они могут иметь (т.е. 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

1 Ответ

1 голос
/ 15 февраля 2011

Если вы используете current_user.projects.build, project.user уже является current_user.Миссия выполнена.

Редактировать: В HABTM одним из пользователей является current_user.Вы можете рассмотреть вторую ассоциацию, чтобы вы могли сказать current_user.owned_projects.build и затем project.owner.

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