tag:crieit.net,2005:https://crieit.net/magazines/same0v0same/rails%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B/feed
Ruby on Railsを使ったwebアプリ開発の記録の投稿 - Crieit
Crieitで連載「Ruby on Railsを使ったwebアプリ開発の記録」の最近の投稿
2020-12-31T18:28:25+09:00
https://crieit.net/magazines/same0v0same/rails%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B/feed
tag:crieit.net,2005:PublicArticle/16453
2020-12-31T18:28:25+09:00
2020-12-31T18:28:25+09:00
https://crieit.net/posts/2020-12-31
2020.12.31 * テスト機能作成
<h2 id="本日のゴール"><a href="#%E6%9C%AC%E6%97%A5%E3%81%AE%E3%82%B4%E3%83%BC%E3%83%AB">本日のゴール</a></h2>
<p>■ テスト機能を作る<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fd6fe1f64804.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fd6fe1f64804.png?mw=700" alt="image.png" /></a><br />
設計を少し見直しました。<br />
単語の編集機能は無くして、追加・削除のみにします。</p>
<h2 id="Test画面生成"><a href="#Test%E7%94%BB%E9%9D%A2%E7%94%9F%E6%88%90">Test画面生成</a></h2>
<p>チャプターごとに単語テストができる画面を作ります!<br />
久々にこのコマンド<br />
<code>$ rails g controller Tests</code><br />
<strong>tests_controller.rb</strong>にテスト画面表示用のindexアクションを作成します。</p>
<pre><code>class TestsController < ApplicationController
def index
@chapter_id = params[:chapter_id]
@words = Word.where(chapter_id: @chapter_id)
end
</code></pre>
<p><strong>routes.rb</strong>には以下を追加</p>
<pre><code>get 'test/', to: 'tests#index'
</code></pre>
<p><strong>chapters/index.html.erb</strong>にテスト画面へのリンクを追加</p>
<pre><code><% @chapters.each do |chapter| %>
<div>
<%= chapter.name %>
<%= link_to 'Show Words', words_path(chapter_id: chapter.id) %>
<%= link_to 'TEST', test_path(chapter_id: chapter.id) %>
</div>
<% end %>
</code></pre>
<p>こんな感じです<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed92d065164.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed92d065164.png?mw=700" alt="image.png" /></a></p>
<p>テスト画面のviewを作成します。<br />
<strong>tests/index.html.erb</strong></p>
<pre><code><h1>TEST - CHAPTER<%= @chapter_id %></h1>
<div>
<%= form_with url: score_path do |f| %>
<% @words.each do |word| %>
<div>
<%= word.english %>
<%= f.text_field :"answers[#{word.id}]" %>
</div>
<% end %>
<%= f.hidden_field :chapter_id, :value => @chapter_id %>
<%= f.submit 'SUBMIT' %>
<% end %>
</div>
</code></pre>
<p>単語のIDと回答をanswersというハッシュに格納してコントローラに渡すようにしています。<br />
(キーがID, 回答が値)<br />
hidden_fieldのチャプターIDはスコア画面で表示させるためのものです。</p>
<p>画面はこうなりました。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed9470d2bca.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed9470d2bca.png?mw=700" alt="image.png" /></a></p>
<h2 id="テストを採点する"><a href="#%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%8E%A1%E7%82%B9%E3%81%99%E3%82%8B">テストを採点する</a></h2>
<p><strong>tests_controller.rb</strong></p>
<pre><code> def score
answers = params[:answers]
should_retest_values = {}
session[:answers] = answers
# 正誤判定
answers.each do |answer|
should_retest = is_wrong(answer)
should_retest_values[answer[0]] = should_retest
end
# wordsテーブルのshould_retestを更新
should_retest_values.each do |k, v|
word = Word.find(k)
word.should_retest = v
word.save
end
# 正答数を算出
score = count_correct_answers
# テンプレートに返却
redirect_to showscore_path(score: score, chapter_id: params[:chapter_id])
end
def show
@score = params[:score]
@chapter_id = params[:chapter_id]
@words = Word.where(chapter_id: @chapter_id)
@answers = session[:answers]
end
private
def is_wrong(answer)
correct_answer = Word.find(answer[0])
return answer[1] != correct_answer.japanese
end
def count_correct_answers
Word.where(should_retest: false).size
end
</code></pre>
<p>scoreメソッドがやっている処理は以下のとおりです。<br />
1. viewから渡された回答をセッションに入れる(スコア画面で表示させるため)<br />
2. 正誤判定し、{ ID: 再テストtrue/false } という形式のハッシュを作成<br />
3. ハッシュの値をもとにDB(wordsテーブルのshould_retestカラム)を更新<br />
4. スコア(正答数)を算出<br />
5. スコア画面にリダイレクト</p>
<p>showメソッドはスコア画面を表示します。<br />
ルーティングは以下のようにしました。<br />
<strong>routes.rb</strong></p>
<pre><code> post 'score/', to:'tests#score'
get 'showscore/', to:'tests#show'
</code></pre>
<h2 id="スコア画面作成"><a href="#%E3%82%B9%E3%82%B3%E3%82%A2%E7%94%BB%E9%9D%A2%E4%BD%9C%E6%88%90">スコア画面作成</a></h2>
<p><strong>tests/show.html.erb</strong></p>
<pre><code><h1>SCORE - CHAPTER<%= @chapter_id %></h1>
<div>
score:<%= @score %>
</div>
<div>
<% @words.each do |word| %>
<p>
<%= word.english %>
<%= word.japanese %>
<%= @answers[word.id.to_s] %>
</p>
<% end %>
</div>
</code></pre>
<p>showメソッドから渡された変数を使ってスコア、英単語・正解・ユーザの回答を表示させています。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed989564e2a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed989564e2a.png?mw=700" alt="image.png" /></a></p>
<p>DBの値もちゃんと更新されました!<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed99768263a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fed99768263a.png?mw=700" alt="image.png" /></a></p>
<p>おわり*0 v 0</p>
same.__.same
tag:crieit.net,2005:PublicArticle/16341
2020-12-11T23:17:05+09:00
2020-12-11T23:17:05+09:00
https://crieit.net/posts/2020-12-11-chapter
2020.12.11 * chapter機能
<h2 id="本日のゴール"><a href="#%E6%9C%AC%E6%97%A5%E3%81%AE%E3%82%B4%E3%83%BC%E3%83%AB">本日のゴール</a></h2>
<p>■ chapterごとに登録・削除できるようにする<br />
<a href="https://crieit.now.sh/upload_images/16e8b3cd8b7371ebe0bc6e70171476af5fb483db2ca67.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/16e8b3cd8b7371ebe0bc6e70171476af5fb483db2ca67.png?mw=700" alt="image" /></a></p>
<h2 id="chapterテーブルの初期値を投入"><a href="#chapter%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E5%88%9D%E6%9C%9F%E5%80%A4%E3%82%92%E6%8A%95%E5%85%A5">chapterテーブルの初期値を投入</a></h2>
<p>Index and Edit and Delete画面を作りたいと思います。<br />
今までwordsテーブルのchapter_idはnullのままにしていたので、まずここを登録できるようにします。</p>
<p>chapterテーブルはとりあえず初期データを登録しておくことにするので、seed.rbを使います。<br />
<strong>db/seed.rb</strong></p>
<pre><code># This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
#
# Examples:
#
# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
# Character.create(name: 'Luke', movie: movies.first)
for i in 1..5 do
Chapter.create(name: "chapter#{i}")
end
</code></pre>
<p>chapter1~chapter5を登録するスクリプトです。<br />
コマンドでデータを投入します。<br />
<code>$ rails db:seed</code><br />
sqliteでテーブルを確認すると<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb4aa8ee03b6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb4aa8ee03b6.png?mw=700" alt="image.png" /></a><br />
ちゃんと投入できていました!</p>
<h2 id="chapter一覧画面作成"><a href="#chapter%E4%B8%80%E8%A6%A7%E7%94%BB%E9%9D%A2%E4%BD%9C%E6%88%90">chapter一覧画面作成</a></h2>
<p>まずChapterコントローラを作成して、indexで一覧表示させます。<br />
<code>$ rails g controller Chapters</code><br />
<strong>chapters_controller.rb</strong></p>
<pre><code>class ChaptersController < ApplicationController
def index
@chapters = Chapter.all
end
end
</code></pre>
<p><strong>views/chapters/index.html.erb</strong></p>
<pre><code><% @chapters.each do |chapter| %>
<div>
<%= chapter.name %>
</div>
<% end %>
</code></pre>
<h2 id="単語をchapterごとに表示させる"><a href="#%E5%8D%98%E8%AA%9E%E3%82%92chapter%E3%81%94%E3%81%A8%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%81%9B%E3%82%8B">単語をchapterごとに表示させる</a></h2>
<p>先ほど作成した<strong>views/chapters/index.html.erb</strong>にwords一覧画面へのリンクを付けます。<br />
リンクが呼ぶのはwordsコントローラのindexアクションです。パラメータとしてchapter_idを渡します。</p>
<pre><code><% @chapters.each do |chapter| %>
<div>
<%= chapter.name %>
<%= link_to 'Show Words', words_path(chapter_id: chapter.id) %>
</div>
<% end %>
</code></pre>
<p><a href="">localhost:3000/chapters</a>はこうなりました<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fceeae8274b7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fceeae8274b7.png?mw=700" alt="image.png" /></a></p>
<p>indexアクションは今までwordsを全件抽出していましたが、これをchapter_idで絞り込むようにします。<br />
<strong>words_controller.rb</strong></p>
<pre><code>class WordsController < ApplicationController
def index
@words = Word.where(chapter_id: params[:chapter_id])
end
</code></pre>
<p>DBにレコードを登録しておいて(chapter_id=1が3件、chapter_id=2が2件にしました)<br />
<a href="">localhost:3000/chapters</a>からリンクを踏んでみます。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fceebde46244.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fceebde46244.png?mw=700" alt="image.png" /></a><br />
URLは<a href="">http://localhost:3000/words?chapter_id=1</a>となっていました。<br />
ここをTOP画面にしたいので、<strong>routes.rb</strong>を修正します。</p>
<pre><code>Rails.application.routes.draw do
root 'chapters#index'
</code></pre>
<h2 id="index, create, deleteをまとめる"><a href="#index%2C+create%2C+delete%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%82%8B">index, create, deleteをまとめる</a></h2>
<p>chapterを選択した後の画面でwordsの一覧表示、追加、削除を行えるようにします。<br />
<strong>words/index.html.erb</strong></p>
<pre><code><h1>WORDS - CHAPTER<%= @chapter_id %></h1>
<div>
<% @words.each do |word| %>
<div>
ID: <%= word.id %> |
ENGLISH: <%= word.english %> |
JAPANESE: <%= word.japanese %>
<%= button_to 'Delete', word_path(word), method: :delete %>
----------
</div>
<% end %>
<p>*ADD NEW WORDS*</p>
<%= render 'form' %>
</div>
</code></pre>
<p>以前作成していたフォームを追加して、editを削除しました。<br />
<strong>_form.html.erb</strong></p>
<pre><code><%= form_with model: @new, local:true do |f| %>
<div>
<%= f.label :english %>
<%= f.text_field :english %>
</div>
<div>
<%= f.label :japanese %>
<%= f.text_field :japanese %>
</div>
<%= f.hidden_field :chapter_id, :value => @chapter_id %>
<%= f.submit %>
<% end %>
</code></pre>
<p>model: @word だった部分を@newとし(words/index.html.erbにはもともと@wordsを渡しているのでややこしいから変更)、hidden_fieldを使ってchapter_idが勝手に登録されるようにしています。<br />
<strong>words_controller</strong>も修正</p>
<pre><code>class WordsController < ApplicationController
def index
@chapter_id = params[:chapter_id]
@words = Word.where(chapter_id: params[:chapter_id])
@new = Word.new
end
〜中略〜
def create
@word = Word.new(word_params)
@word.save
redirect_to words_path(word_params)
end
</code></pre>
<p>indexアクションにはフォームで使用する@newを追加、<br />
createアクションにはredirect_toの引数を追加しました。word_paramsは[:chapter_id]を引数として受け取るように定義してあるので、これによってチャプターの単語一覧画面にリダイレクトされます。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fd37ece72e9c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fd37ece72e9c.png?mw=700" alt="image.png" /></a><br />
こんな感じになりました</p>
<h2 id="宿題"><a href="#%E5%AE%BF%E9%A1%8C">宿題</a></h2>
<p>ルーティングやアクションをいろいろ変更したので、リダイレクト先がおかしかったり使わないviewsが出てきたりしてしまいました。<br />
整理したい!!</p>
<p>おわり*0 v 0</p>
same.__.same
tag:crieit.net,2005:PublicArticle/16225
2020-11-17T17:27:34+09:00
2020-11-17T17:27:34+09:00
https://crieit.net/posts/2020-11-17-5fb389769c73b
2020.11.17 * 画面設計
<h2 id="本日のゴール"><a href="#%E6%9C%AC%E6%97%A5%E3%81%AE%E3%82%B4%E3%83%BC%E3%83%AB">本日のゴール</a></h2>
<p>■ 画面設計を考える<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb388da74327.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb388da74327.png?mw=700" alt="image.png" /></a><br />
こんな感じにしていきたいと思います。</p>
<p>おわり*0 v 0</p>
same.__.same
tag:crieit.net,2005:PublicArticle/16222
2020-11-16T18:01:31+09:00
2020-11-16T18:01:31+09:00
https://crieit.net/posts/2020-11-16-5fb23feb9b91e
2020.11.16 * 編集機能
<h2 id="本日のゴール"><a href="#%E6%9C%AC%E6%97%A5%E3%81%AE%E3%82%B4%E3%83%BC%E3%83%AB">本日のゴール</a></h2>
<p>■ 編集機能作成</p>
<h2 id="editアクション作成"><a href="#edit%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E4%BD%9C%E6%88%90">editアクション作成</a></h2>
<p>まず編集画面に遷移させるアクションを作成します。<br />
<strong>words_controller.py</strong></p>
<pre><code> def edit
@word = Word.find(params[:id])
end
</code></pre>
<p>showアクションと同じく、idをキーに単語を1つ探してviewに渡すという処理です。</p>
<h2 id="createアクション作成"><a href="#create%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E4%BD%9C%E6%88%90">createアクション作成</a></h2>
<p>続いて、viewから受け取った値をDBに格納するアクションを作成します。<br />
<strong>words_controller.py</strong></p>
<pre><code> def update
@word = Word.find(params[:id])
@word.update(word_params)
redirect_to words_path
end
中略
private
def word_params
params.require(:word).permit(:english, :japanese)
end
</code></pre>
<p>処理の内容は以下の通り。<br />
1. idをキーに更新対象の単語を探す<br />
2. viewから受け取った引数をword_paramsに渡し、updateメソッドでDB更新<br />
3. 一覧画面にリダイレクト</p>
<h2 id="view作成"><a href="#view%E4%BD%9C%E6%88%90">view作成</a></h2>
<p>最後に編集画面を作成します。<br />
<strong>words/edit.html.erb</strong></p>
<pre><code><%= render 'form' %>
</code></pre>
<p><a href="https://crieit.net/posts/2020-11-10">第3回</a>の時にフォームのパーシャルを作成しているので、editでもこれを使います。</p>
<p><a href="">http://localhost:3000/words/1/edit</a>にアクセスしてみます。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb226913063c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb226913063c.png?mw=700" alt="image.png" /></a><br />
登録済みの値が表示されました!</p>
<p>値を変えてSaveボタンを押してみます。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb226c0ad05b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb226c0ad05b.png?mw=700" alt="image.png" /></a><br />
↓ボタンクリック<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb226ea153ae.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb226ea153ae.png?mw=700" alt="image.png" /></a><br />
更新できました!<br />
と思ったらIDが5になっている 0 _ 0</p>
<h2 id="フォームのパーシャルを修正"><a href="#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E3%83%91%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3%82%92%E4%BF%AE%E6%AD%A3">フォームのパーシャルを修正</a></h2>
<p>updateを実行するはずがcreateしてしまっている原因はフォームにありそうです。<br />
<strong>words/_form.html.erb</strong></p>
<pre><code><%= form_with scope: :word, url: words_path, local:true do |f| %>
<div>
<%= f.label :english %>
<%= f.text_field :english %>
</div>
<div>
<%= f.label :japanese %>
<%= f.text_field :japanese %>
</div>
<%= f.submit %>
<% end %>
</code></pre>
<p>1行目の<strong>url: words_path</strong>が<strong>words#create</strong>を指しているので削除してみます。</p>
<pre><code><%= form_with scope: :word, local:true do |f| %>
以下略
</code></pre>
<p><a href="">http://localhost:3000/words/new</a>にアクセスして<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb23d7a4c1b3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb23d7a4c1b3.png?mw=700" alt="image.png" /></a><br />
Saveボタンクリック↓<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb23d438e5bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb23d438e5bc.png?mw=700" alt="image.png" /></a><br />
0 _ 0...</p>
<p>いろいろ調べて以下に落ち着きました。<br />
<strong>words/_form.html.erb</strong></p>
<pre><code><%= form_with model: @word, local:true do |f| %>
</code></pre>
<p><strong>words_controller.rb</strong></p>
<pre><code> def new
@word = Word.new
end
</code></pre>
<p>仕組みがあんまり理解できていないのでもやもやする....</p>
<h2 id="editのリンク作成"><a href="#edit%E3%81%AE%E3%83%AA%E3%83%B3%E3%82%AF%E4%BD%9C%E6%88%90">editのリンク作成</a></h2>
<p>一覧画面から編集画面に遷移できるようリンクを作っておきます。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb227f577704.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fb227f577704.png?mw=700" alt="image.png" /></a><br />
editはedit_word_pathというルーティングになっているので、index.html.erbに<br />
<code><%= button_to 'Delete', word_path(word), method: :delete %></code><br />
という行を追加します。</p>
<p><strong>words/index.html.erb</strong></p>
<pre><code><h1>INDEX</h1>
<div>
<% @words.each do |word| %>
<div>
ID: <%= word.id %> |
ENGLISH: <%= word.english %> |
JAPANESE: <%= word.japanese %>
<%= button_to 'Edit', edit_word_path(word), method: :get%>
<%= button_to 'Delete', word_path(word), method: :delete %>
----------
</div>
<% end %>
</div>
</code></pre>
<p><a href="">http://localhost:3000/words</a>にアクセス</p>
<p>これで一通りのCRUDが完成しました〜🎉</p>
<p>おわり*0 v 0</p>
same.__.same
tag:crieit.net,2005:PublicArticle/16214
2020-11-12T23:37:19+09:00
2020-11-12T23:37:19+09:00
https://crieit.net/posts/2020-11-12
2020.11.12 * 単語の一覧表示
<h2 id="本日のゴール"><a href="#%E6%9C%AC%E6%97%A5%E3%81%AE%E3%82%B4%E3%83%BC%E3%83%AB">本日のゴール</a></h2>
<p>■ 一覧表示作成<br />
■ トップ画面にリンクを作成</p>
<h2 id="indexアクション作成"><a href="#index%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E4%BD%9C%E6%88%90">indexアクション作成</a></h2>
<p>前回showアクションを一覧表示用のアクションにしましたが、単語のIDを指定して全件表示するのはおかしいです。<br />
Railsの定石通り、全件表示はindexアクションにします。<br />
<strong>words/index.html.erb</strong>を新しく作成します。</p>
<pre><code><h1>INDEX</h1>
<div>
<% @words.each do |word| %>
<div>
ID: <%= word.id %> |
ENGLISH: <%= word.english %> |
JAPANESE: <%= word.japanese %>
<%= button_to 'Delete', word_path(word), method: :delete %>
</div>
<% end %>
</div>
</code></pre>
<p>中身はh1タグ以外すべてshow.html.erbのコピペです。</p>
<p>続いてコントローラ!<br />
<strong>words_controller.rb</strong></p>
<pre><code>class WordsController < ApplicationController
def index
@words = Word.all
end
以下略
</code></pre>
<p>先頭にindexアクションを作りました。</p>
<p><a href="">http://localhost:3000/words</a>にアクセスしてみます。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fad442f032e1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fad442f032e1.png?mw=700" alt="image.png" /></a><br />
やったー!</p>
<h2 id="showアクションを本来の姿に戻す"><a href="#show%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E6%9C%AC%E6%9D%A5%E3%81%AE%E5%A7%BF%E3%81%AB%E6%88%BB%E3%81%99">showアクションを本来の姿に戻す</a></h2>
<p>IDを指定して1件だけ表示するやつに戻します。<br />
<strong>words_controller.rb</strong> ※showメソッドのみ抜粋</p>
<pre><code> def show
@word = Word.find(params[:id])
end
</code></pre>
<p><strong>words/show.html.erb</strong></p>
<pre><code><h1>SHOW</h1>
<div>
ID: <%= @word.id %> |
ENGLISH: <%= @word.english %> |
JAPANESE: <%= @word.japanese %>
</div>
</code></pre>
<p><a href="">http://localhost:3000/words/1</a>にアクセスします。<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fad45a8dbe18.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fad45a8dbe18.png?mw=700" alt="image.png" /></a><br />
無事に本来の姿に戻りました。</p>
<h2 id="トップ画面にindex, newのリンクを作る"><a href="#%E3%83%88%E3%83%83%E3%83%97%E7%94%BB%E9%9D%A2%E3%81%ABindex%2C+new%E3%81%AE%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E4%BD%9C%E3%82%8B">トップ画面にindex, newのリンクを作る</a></h2>
<p><a href="">http://localhost:3000/words/</a>や<a href="">http://localhost:3000/words/new</a>にいちいちアクセスするのが面倒なので、ついでにリンクを作ってしまいます。<br />
<a href="https://crieit.net/posts/2-5fa913cb5e444">第2回目の投稿</a>で作成したトップ画面を使うことにしました。<br />
<strong>top/index.html.erb</strong></p>
<pre><code><h1>*WELCOME*</h1>
<p><%= link_to 'Add A Word', new_word_path %></p>
<p><%= link_to 'Show All Words', words_path %></p>
</code></pre>
<p><a href="">http://localhost:3000/</a>にアクセス<br />
<a href="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fad48828fcac.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc26d865acd6cc517615f2588057bac25fad48828fcac.png?mw=700" alt="image.png" /></a><br />
動作確認もOKでした!</p>
<p>おわり*0 v 0</p>
same.__.same