rails new myapp --database=postgresql
add your username and password to database.yml
rails db:create
gem 'devise'
bundle install
rails generate devise:install
(add config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } to config/environmrnt/development.rb)
(add root 'posts#index' to routes.rb)
rails generate devise:views
rails generate devise User
rails db:migrate
config.navigational_formats = [:html, :turbo_stream]
rails generate scaffold Post title:string body:text user:references
rails db:migrate
This ensures that a user is logged in before they can create a post
before_action :authenticate_user!
rails generate migration add_fieldname_to_tablename fieldname:string
rails generate migration add_name_to_users name:string
rails db:migrate
has_many :posts
in app/controllers/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:firstname, :lastname])
end
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
remove these two
<div>
<%= form.label :user_id, style: "display: block" %>
<%= form.text_field :user_id %>
add this line to create , new and edit methods @post.user = current_user
def post_params
params.require(:post).permit(:title, :text)
end
def index
@posts = Post.where(user_id: current_user.id)
end
gem 'nested_scaffold'
bundle install
rails generate nested_scaffold PARENT_NAME/NAME [field:type field:type] [options]
rails g nested_scaffold post/comment text:string post:references user:references
rails db:migrate
resources :posts do
resources :comments
end
<div>
<%= form.label :user_id, style: "display: block" %>
<%= form.text_field :user_id %>
</div>
<div>
<%= form.label :post_id, style: "display: block" %>
<%= form.text_field :post_id %>
</div>
has_many :comments , dependent: :destroy
add this line to comments controller (create , new and edit methods) @comment.user_id = current_user.id
def update
@comment.user_id = current_user.id
@comment.post_id = @post.id
@comment.update(comment_params)
redirect_to post_comments_url(@post)
end
rails generate controller home index
authenticated :user do
root "categories#index", as: :authenticated_root
end
root to: "home#index"
<%= link_to "Sign up", new_user_registration_path %> <%= link_to "Log in", new_user_session_path %>
devise_scope :user do get '/users/sign_out' => 'devise/sessions#destroy' end
<%= link_to "Sign Out", destroy_user_session_path %>
<%= link_to "Sign In", new_user_session_path %>
<%= link_to "Sign Up", new_user_registration_path %>
switch to master branch
heroku login
heroku create
heroku stack
heroku stack:set heroku-18
git push heroku master
heroku run rails db:migrate
rails new my_first_rails_api --api --database=postgresql
rails g model dog name:string age:integer
rails db:migrate
rails g controller Api/v1/dogs