Note that there are some explanatory texts on larger screens.

plurals
  1. POHow do I get the storage of each user account to update when a new file is uploaded - in Rails 3?
    primarykey
    data
    text
    <p>What I would like to happen is every single time a new file is uploaded, <code>user.space_used</code> is updated.</p> <p>But that doesn't happen right now. In order to get an update, I have to manually run <code>user.update_space</code> at the console to update a specific user, or use an array to cycle through all the users and update it like that.</p> <p>How do I get it to do it at the right time - also, it would be nice if I could verify that the <code>space_used</code> column on the <code>User</code> model has the total sum of the filesizes of all the files uploaded for that user on the <code>Upload</code> model.</p> <p>My user model looks like this:</p> <pre><code># == Schema Information # Schema version: 20110412170916 # # Table name: users # # id :integer not null, primary key # email :string(255) # encrypted_password :string(128) # password_salt :string(255) # reset_password_token :string(255) # remember_token :string(255) # remember_created_at :datetime # sign_in_count :integer # current_sign_in_at :datetime # last_sign_in_at :datetime # current_sign_in_ip :string(255) # last_sign_in_ip :string(255) # username :string(255) # first_name :string(255) # last_name :string(255) # created_at :datetime # updated_at :datetime # invitation_token :string(60) # invitation_sent_at :datetime # plan_id :integer # current_state :string(255) # confirmation_token :string(255) # confirmed_at :datetime # confirmation_sent_at :datetime # space_used :integer default(0), not null # failed_attempts :integer default(0) # unlock_token :string(255) # locked_at :datetime # trial_end_date :date # active_subscription :boolean # class User &lt; ActiveRecord::Base acts_as_voter devise :database_authenticatable, :confirmable, :registerable, :timeoutable, :recoverable, :rememberable, :trackable, :validatable, :invitable, :lockable attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :first_name, :last_name, :plan_id after_save :update_space def role_symbols roles.map do |role| role.name.underscore.to_sym end end def update_space total_size = 0 if self.uploads.count &gt; 0 self.uploads.each do |upload| total_size += upload[:image_file_size] end end self.space_used = total_size end def space_threshold_reached? self.plan.storage == self.space_used end def space_left (self.plan.storage * 1024 * 1024 * 1024) - self.space_used.to_f end end </code></pre> <p>My Upload model looks like this:</p> <pre><code># == Schema Information # Schema version: 20110330215959 # # Table name: uploads # # id :integer not null, primary key # name :string(255) # description :string(255) # image_file_name :string(255) # image_content_type :string(255) # image_file_size :integer # image_updated_at :datetime # stage_id :integer # user_id :integer # created_at :datetime # updated_at :datetime class Upload &lt; ActiveRecord::Base acts_as_voteable has_attached_file :image, :styles =&gt; { :thumb =&gt; "64x64" }, :storage =&gt; :s3, :path =&gt; "/:style/:id/:filename" validates_attachment_presence :image validates_attachment_size :image, :less_than =&gt; 10.megabytes validates_attachment_content_type :image, :content_type =&gt; ['image/jpeg', 'image/png', 'image/gif', 'image/jpg', 'image/JPG'] after_post_process :update_users_space_used def self.total_used total_size = 0 all.each do |upload| total_size += upload.image_file_size end return total_size end def update_users_space_used Authorization.current_user.space_used += self.image_file_size end end </code></pre> <p>Thanks.</p> <p>Edit1: Btw, I am using paperclip to manage the uploads.</p> <p>Edit2: In the <code>Upload.rb</code> model, I changed the <code>before_save</code> to the <code>after_post_process</code> callback for paperclip and it still doesn't work.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload