Ruby on Rails を使って「W3Qみたいなアプリ」を作ってみる④
前回は質問投稿の処理を作ったので、今回は回答投稿の処理を作ります。
質問と作り方は同じなのでサクッと。
質問の個別ページを作成
/app/views/posts/show.html.erb を作ります。
<h2>質問内容</h2> <div> <span><%= @post.id %>/<%= @post.user_id %>/<%= @post.created_at %></span> <br>投稿内容:<%= @post.content %> </div>
/app/controllers/posts_controller.rb にshowメソッドを追加。
def show #params[:id]でURLの値を取得する。 @post = Post.find_by(id: params[:id]) end
/config/routes.rb
質問個別ページへのリンクをクリックしたときのルーティングを追加。
「https://xxxxxxxxxx/q/1」の場合、「1」が「params[:id]」に入る。
get 'q/:id' => 'posts#show' #質問の個別ページへ
質問の個別ページができた。
シンプルですが、こんな感じです。
質問一覧ページから、質問をクリック。
質問個別ページへ画面遷移する。
回答投稿の機能を作る
次に質問に対する回答投稿の機能を作ります!
回答テーブルの作成
マイグレーションファイルの作成 rails g model Answer content:text q_id:integer user_id:string テーブル作成 rails db:migrate
コントローラー作成
rails g controller answers
作成したコントローラーにcreateメソッドを追加する。
def create @answer = Answer.new( content: params[:content], q_id: params[:id], user_id: "ans_user" ) @answer.save #元のページへ戻る(アクション:/q/id を呼び出す) redirect_to("/q/#{params[:id]}") end
ビューの作成
さっき作った /app/views/posts/show.html.erb に回答一覧を表示する部分を追加します。
<h2>回答する</h2> <%= form_tag("/q/#{@post.id}/create") do %> <textarea name="content"></textarea> <input type="submit" value="投稿"> <% end %> <h2>回答一覧</h2> <ul> <% if @answers.empty? then %> 回答はまだありません。 <% else %> <% @answers.each do |answer| %> <li> <span><%= answer.id %>/<%= answer.user_id %>/<%= answer.created_at %></span> <br>回答内容:<%= answer.content %> </li> <% end %> <% end %> </ul>
ルーティング
/config/routes.rb
回答の投稿ボタンを押したときのルーティングを追加。
post 'q/:id/create' => 'answers#create' #回答を作成
回答投稿の機能ができた!
とりあえず、こんな感じです。
フォームに回答を入力して投稿ボタンを押すと、一覧が表示されます。
質問の処理と同じですね。
まとめ
質問の個別ページと回答投稿機能を作りました!
次回は削除機能を作ろうと思います!