Full Stack Cheat Sheet
Sunday, July 17, 2016
Saturday, July 16, 2016
Action Mailer with Devise and Gmail
https://launchschool.com/blog/handling-emails-in-rails
https://sendgrid.com/docs/Integrate/Frameworks/rubyonrails.html
[] create mailer mailers/user_notifier_mailer.rb add lines
class UserNotifierMailer < Devise::Mailer default :from => 'pseudoreza@gmail.com' # send a signup email to the user, pass in the user object that contains the user's email address def send_signup_email(user) @user = user mail( :to => @user.email, :subject => 'Thanks for signing up for our amazing app' ) end end
[] edit /config/environments/development.rb add lines
config.action_mailer.delivery_method = :smtp # SMTP settings for gmail config.action_mailer.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :user_name => ENV['gmail_username'], :password => ENV['gmail_password'], :authentication => "plain", :enable_starttls_auto => true }
[] edit /config/environments/production.rb add lines
config.action_mailer.delivery_method = :smtp # SMTP settings for gmail config.action_mailer.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :user_name => ENV['gmail_username'], :password => ENV['gmail_password'], :authentication => "plain", :enable_starttls_auto => true }
[] create controller registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController def create # Create the user from params @user = User.new sign_up_params if @user.save # Deliver the signup email UserNotifierMailer.send_signup_email(@user).deliver redirect_to(new_user_session_path, :notice => 'User created') else render :action => 'new' end end end
[] edit config/initilizers/devise.rb add line
config.mailer = 'UserNotifierMailer'
[] modify routes.rb
devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}, controllers: { registrations: 'registrations' }
Video
Pagination using Kaminari
Kaminari
click here to visit kaminari github repository.
[01] add kaminari gem
gem 'kaminari'
[02] edit articles_controller.rb modify line
def index
@articles = Article.all.page(params[:page]).per(5)
end
[03] edit views/artciles/index.html.erb add line
<%= paginate @articles %>
[05] add kaminari theme // github
$rails g kaminari:views default
gem 'kaminari'
[02] edit articles_controller.rb modify line
def index
@articles = Article.all.page(params[:page]).per(5)
end
[03] edit views/artciles/index.html.erb add line
<%= paginate @articles %>
change look
[04] edit config/locales/en.yml add lines
views:
pagination:
previous: "<<"
next: ">>"
first: "First"
last: "Last"
truncate: "..."
$rails g kaminari:views default
Video
Friday, July 15, 2016
Rails authentication using Devise
Devise
devise gem github url: https://github.com/plataformatec/devise
[01] add devise gem
gem 'devise'
[02] install gem
$bundle install
[03] run generator
$rails generate devise:install
[04] generate model
$rails generate devise User
$rails db:migrate
[05] edit config/environments/development.rb add line
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
[06] edit app/views/layouts/application.html.erb add lines
<div id=user_nav>
<% if user_signed_in? %>
<p> Logged in as <strong><%= current_user.email %></strong>. </p>
<%= link_to "Edit Profile", edit_user_registration_path %> |
<%= link_to "Logout", destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to "Sign up", new_user_registration_path %> |
<%= link_to "Login", new_user_session_path %>
<% end %>
</div>
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, id: "flash_#{name}" %>
<% end %>
[07] copy Devise views
$rails g devise:views
Customize Sign_in to Login
[08] edit config/locales/devise.en.yml edit linessigned_in: "Logged in successfully."
signed_out: "Logged out successfully."
already_signed_out: "Logged out successfully."
[09] edit views/devise/sessions/new.html.erb
[10] edit routes.rb
devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}
Login as username
[11] add username column in users table$rails g migration add_username_to_users username
$rails db:migrate
[12] edit views/devise/sessions/new.html.erb
<div class="field">
<%= f.label :username %><br />
<%= f.text_field :username, autofocus: true %>
</div>
[13] edit config/initilizers/devise.rb
config.authentication_keys = [:username]
config.case_insensitive_keys = [:username]
config.strip_whitespace_keys = [:username]
[14] edit user.rb add line
validates_presence_of :username
[15] edit application_controller.rb add lines
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up) do |user_params|
user_params.permit({ roles: [] }, :email, :username, :password, :password_confirmation)
end
end
restrict article content
[16] edit articles_controller.rb add linebefore_action :authenticate_user!, except: [:index, :show]
*** before_action is a new syntax for before_filter
Video Resources
Subscribe to:
Posts (Atom)