personalアプリケーションを作成
kiri@smtp:~/work/rails[1192]% rails new personal -B kiri@smtp:~/work/rails[1193]% cd personal/ kiri@smtp:~/work/rails/personal[1194]% patch < ../patches/Gemfile.diff kiri@smtp:~/work/rails/personal[1195]% bundle exec rails webpacker:install
"name"および"address"列を持つ"friend"モデルを作成
kiri@smtp:~/work/rails/personal[1196]% rails generate scaffold friend name:string address:string
/usr/local/lib/ruby/gems/3.3/gems/spring-4.1.1/lib/spring/watcher/abstract.rb:2: warning: mutex_m which will be not part of the default gems since Ruby 3.4.0
/usr/local/lib/ruby/gems/3.3/gems/spring-4.1.1/lib/spring/watcher/abstract.rb:2: warning: mutex_m which will be not part of the default gems since Ruby 3.4.0
Running via Spring preloader in process 55056
invoke active_record
create db/migrate/20240228004444_create_friends.rb
create app/models/friend.rb
invoke test_unit
create test/models/friend_test.rb
create test/fixtures/friends.yml
invoke resource_route
route resources :friends
invoke scaffold_controller
create app/controllers/friends_controller.rb
invoke erb
create app/views/friends
create app/views/friends/index.html.erb
create app/views/friends/edit.html.erb
create app/views/friends/show.html.erb
create app/views/friends/new.html.erb
create app/views/friends/_form.html.erb
invoke resource_route
invoke test_unit
create test/controllers/friends_controller_test.rb
create test/system/friends_test.rb
invoke helper
create app/helpers/friends_helper.rb
invoke test_unit
invoke jbuilder
create app/views/friends/index.json.jbuilder
create app/views/friends/show.json.jbuilder
create app/views/friends/_friend.json.jbuilder
invoke assets
invoke scss
create app/assets/stylesheets/friends.scss
invoke scss
create app/assets/stylesheets/scaffolds.scss
kiri@smtp:~/work/rails/personal[1197]% モデル記述ファイル⇒app/models/friend.rb
class Friend < ApplicationRecord end
マイグレーションスクリプト⇒db/migrate/20240228004444_create_friends.rb
class CreateFriends < ActiveRecord::Migration[6.1]
def change
create_table :friends do |t|
t.string :name
t.string :address
t.timestamps
end
end
end
コントローラ⇒app/controllers/friends_controller.rb
class FriendsController < ApplicationController
before_action :set_friend, only: %i[ show edit update destroy ]
# GET /friends or /friends.json
def index
@friends = Friend.all
end
# GET /friends/1 or /friends/1.json
def show
end
# GET /friends/new
def new
@friend = Friend.new
end
# GET /friends/1/edit
def edit
end
# POST /friends or /friends.json
def create
@friend = Friend.new(friend_params)
respond_to do |format|
if @friend.save
format.html { redirect_to friend_url(@friend), notice: "Friend was successfully created." }
format.json { render :show, status: :created, location: @friend }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @friend.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /friends/1 or /friends/1.json
def update
respond_to do |format|
if @friend.update(friend_params)
format.html { redirect_to friend_url(@friend), notice: "Friend was successfully updated." }
format.json { render :show, status: :ok, location: @friend }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @friend.errors, status: :unprocessable_entity }
end
end
end
# DELETE /friends/1 or /friends/1.json
def destroy
@friend.destroy
respond_to do |format|
format.html { redirect_to friends_url, notice: "Friend was successfully destroyed." }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_friend
@friend = Friend.find(params[:id])
end
# Only allow a list of trusted parameters through.
def friend_params
params.require(:friend).permit(:name, :address)
end
end
editビューファイル
<h1>Editing Friend</h1> <%= render 'form', friend: @friend %> <%= link_to 'Show', @friend %> | <%= link_to 'Back', friends_path %>
render 'form', friend: @friend
_form.html.erb をインクルードし表示
link_to 'Show', @friend
'Show' → @friend_path(@friend) へリンク
app/views/friends/index.html.erb
<p id="notice"><%= notice %></p>
<h1>Friends</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Address</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @friends.each do |friend| %>
<tr>
<td><%= friend.name %></td>
<td><%= friend.address %></td>
<td><%= link_to 'Show', friend %></td>
<td><%= link_to 'Edit', edit_friend_path(friend) %></td>
<td><%= link_to 'Destroy', friend, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Friend', new_friend_path %>
app/views/friends/new.html.erb
<h1>New Friend</h1> <%= render 'form', friend: @friend %> <%= link_to 'Back', friends_path %>
app/views/friends/show.html.erb
<p id="notice"><%= notice %></p> <p> <strong>Name:</strong> <%= @friend.name %> </p> <p> <strong>Address:</strong> <%= @friend.address %> </p> <%= link_to 'Edit', edit_friend_path(@friend) %> | <%= link_to 'Back', friends_path %>
データベースの作成
kiri@smtp:~/work/rails/personal[1202]% rake db:create
データベーステーブルの作成(マイグレーションスクリプトの実行)
kiri@smtp:~/work/rails/personal[1203]% rake db:migrate == 20240228004444 CreateFriends: migrating ==================================== -- create_table(:friends) -> 0.0019s == 20240228004444 CreateFriends: migrated (0.0019s) =========================== kiri@smtp:~/work/rails/personal[1204]%
ウェブサーバーの起動
kiri@smtp:~/work/rails/personal[1204]% rails server -u webrick
ウェブにアクセス
kiri@smtp:~/work/rails/personal[1205]% rails server -u webrick => Booting WEBrick => Rails 6.1.7.6 application starting in development http://localhost:3000 => Run `bin/rails server --help` for more startup options [2024-02-28 15:01:34] INFO WEBrick 1.8.1 [2024-02-28 15:01:34] INFO ruby 3.3.0 (2023-09-14) [amd64-freebsd15] [2024-02-28 15:01:34] INFO WEBrick::HTTPServer#start: pid=62056 port=3000 Started GET "/friends" for 192.168.1.1 at 2024-02-28 15:01:42 +0900 Cannot render console from 192.168.1.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 (0.6ms) SELECT sqlite_version(*) (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC Processing by FriendsController#index as HTML Rendering layout layouts/application.html.erb Rendering friends/index.html.erb within layouts/application Friend Load (0.1ms) SELECT "friends".* FROM "friends" ? app/views/friends/index.html.erb:15 Rendered friends/index.html.erb within layouts/application (Duration: 3.1ms | Allocations: 1653) [Webpacker] Everything's up-to-date. Nothing to do Rendered layout layouts/application.html.erb (Duration: 1091.8ms | Allocations: 1455681) Completed 200 OK in 1111ms (Views: 1094.2ms | ActiveRecord: 0.1ms | Allocations: 1459319) 192.168.1.1 - - [28/Feb/2024:15:01:41 JST] "GET /friends HTTP/1.1" 200 2020 - -> /friends 192.168.1.1 - - [28/Feb/2024:15:01:43 JST] "GET /packs/js/application-bf35e431b0b1e99daf74.js HTTP/1.1" 304 0 http://localhost:3000/friends -> /packs/js/application-bf35e431b0b1e99daf74.js 192.168.1.1 - - [28/Feb/2024:15:01:43 JST] "GET /favicon.ico HTTP/1.1" 200 0 http://localhost:3000/friends -> /favicon.ico 192.168.1.1 - - [28/Feb/2024:15:01:43 JST] "POST /mini-profiler-resources/results HTTP/1.1" 200 4392 http://localhost:3000/friends -> /mini-profiler-resources/results 192.168.1.1 - - [28/Feb/2024:15:01:43 JST] "POST /mini-profiler-resources/results HTTP/1.1" 200 1319 http://localhost:3000/friends -> /mini-profiler-resources/results

データの登録




データの削除


app/views/friends/index.html.erbで
link_to 'Destroy', friend, method: :delete, data: { confirm: 'Are you sure?' }
の`method: :delete'が効いていない