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
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
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
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
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
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