Skip to content

Instantly share code, notes, and snippets.

@dohoonk
Last active February 11, 2016 21:48
Show Gist options
  • Select an option

  • Save dohoonk/482f115eddfd128a0fe2 to your computer and use it in GitHub Desktop.

Select an option

Save dohoonk/482f115eddfd128a0fe2 to your computer and use it in GitHub Desktop.
codecore

One to many

In the seed file ["Art, "Science", "Cats", "Sports", "Technology"].each do |cat| Category.create(name: cat) end

When trying to add category id

bin/rails g migration add_category_references_to_questions category:references

in the _form.html.erb file

f.collection_select(:category_id, Category.order(:name), :id, :name)

Category< ActiveRecord::Base has_many :questions, dpendent: :nullify

Question < ActiveRecor::Base belings_to :category

have to change permited params

params.require(:question).permit([:title, :body, :category_id])

display category in the show page

law of demeter

@question.category.name

-We can create a method to help

In question.rb

def category_name category.name if category end


bin/rails g model comment body:text answer:references

-answer.rb file

has_many :comments, dependent: :destroy

-seeds.rb 100.times do q = question.new 10.times do a = q.asnwers.create(body: Faker::Company.catch_phrase) 5.times {a.comments.create(body: Faker::Company.bs)} end end

-find comments for a answer comments = [] q.answers.each {|ans| comments << ans.comments }

-questions model has_many :comments, through: :answers

-routes.rb resources :answers, only: [:create, :destroy] do resources : comments, only [:create, destroy] end

or resources :answers, only: [:create, :destroy] do end

resources :answers, only [] do resources :comments, only: [:create, :destroy] end


password_digest

bin/rails g model user first_name last_name email password_digest

bin/rake db:migrate

-user.rb

attr_accessor :password attr_accessor :password_confirmation

Digest:: y bcrypt Digest::Sha1.digest("abcd1234")

has_secure_password

gem "bcrypt"

-user.rb

has_secure_password

password_confirmation: "ASDFASdaf"

-user.rb

validates :password, length: {minimum: 6} validates :first_name, presence: true validates :last_name, presence: true validates :email, presence: true, uniqueness: true, format: (ruby regex email)

bin/rails g controller users

-routes.rb

resources :users, only: [:create, :new]

-users controller

def new @user = User.new end

-users view

users.html.erb

Sign UP

form_for @user do |f|

f.label :first_name f.tex_field :first_name

f.label :last_name f.tex_field :last_name

f.label :email f.tex_field :email_field

f.label :password f.password_field :password

f.label :password_confirmation f.password_field :password_confrimation

f.submit

end

-users controller

def create params_user = require(:user).permit(:first_name :last_name :email :password :password_digest) @user = User.new params_user if @user.save redirect_to root_path else render :new

end end


saving sessions

end

-welcome controller

def about cookies[:abc] = "xyz" end

def about cookies.signed[:abc] = "xyz" end

rails.logger.info cookies.signed.hello[:hello]

cookies are limited

session[:foo] = bar

-user controller

session[:user_id] = @user.id

-application.html.erb

if session[:user_id] User.find(session[:user_id]).first_name else link_to "sign up", new_user_path end

-application controller

defining it in application controller makes it usable in all controllers in our syste. Adding "helper_method :current_user" lets it usable in view files as well

def current_user user.find(session[:user_id]) end helper_method :current_user | | |

if session[:user_id] current_user.first_name else link_to "sign up", new_user_path end

def user_signed_in? session[:user_id].present? end helper_method :user_signed_in?

if user_signed_in? current_user.first_name else link_to "sign up", new_user_path end


Conditioner assingment

def current_user @current_user ||= User.find(session[:user_id]) end helper_method :current_user

Try to stick with 7 standard methods

bin/rails g controller sessions

-routes.rb

resources :sessions, only: [:new,:create,:destroy]

-sessions controller

def new end

-sessions view create new.html.erb

Sign in

form_tag sessions_path do label_tag :email text_fiedl_tag :email

label_tag :passward paddword_field_tag :password

submit_tag

end

-sessions controller

def create render json: params end

in consoler

u = user.find_by_email "[email protected]" u.authenticate("supersecret")

def create user = User.find_by_email params[:email] if user && user.authenticate(params[:password]) session[:user_id] = user.id redirect_to root_path, notice: "Signed in!" else flash[:alert] = "wrong credentials!" render :new end end

-application controll

def sign_in(user) session[:user_id] = user.id end

-sessions controller

def destroy session[:user_id] = nil redirect_to root_path, notice: "signed out!" end

  • routes.rb

resources :sessions, only: [:new, :create] do delete :destroy, on: :collection end

-application.html.erb

link_to "log out", sessions_path, method: :delete

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment