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