Thursday, 2 March 2017

Clever ENUM in RAILS: 
class Photo < ActiveRecord::Base
    STATUSES = [STATUS_QUEUED = 'queued', STATUS_NEW = 'new', STATUS_CHANGED = 'changed', STATUS_REMOVED = 'removed', STATUS_READY = 'ready']

    validates :status, inclusion: {in: STATUSES}

    def change_status
        self.status = Photo::STATUS_QUEUED
    end
end

Check if external gem-dependent classes are defined

if defined? CalendarDateSelect
  CalendarDateSelect.format = :finnish
end

Fetch current user in models

class User < ActiveRecord::Base
  def self.current
    Thread.current[:user]
  end
  def self.current=(user)
    Thread.current[:user] = user
  end
end

Fix N+1 Queries

# your controller
def index
  @users = User.paginate( :include => :car, :page => params[:page], :per_page => 20 )
end

Use caching !

http://rails-bestpractices.com/posts/2010/07/25/use-caching/

Don't rescue Exception, rescue StandardError

Explicitly rescuing Exception will rescue even not normally recoverable errors such as SyntaxError, LoadError, and Interrupt.

monitor your backend services

.
The website is running on linode with multiple processes:
  1. nginx - http reverse proxy server
  2. puma - ruby app server
  3. mysql - database server
  4. memcached - cache server
  5. sphinx - full text search server
  6. delayed_job - background job process

Move code into model

<% if @post.editable_by?(current_user)) %>
  <%= link_to 'Edit this post', edit_post_url(@post) %>
<% end %>

class Post < ActiveRecord::Base
  def editable_by?(user)
    user && (user == self.user || self.editors.include?(user))
  end
end

No comments:

Post a Comment