ビューを作る
ターミナルでrails s を入力。
ポートからURLで飛びrails起動されたのを確認したら、
さらにroutesで設定した questions/new をURLに付け足す。
試しにviews > questions > new.html.erbを新規ファイルで作り、
H1タグでNEWを記述。
サーバーを再度確認、「NEW」の記述が確認できたら次のステップへ
QuestionsControllerを開き空のquestionモデルのインスタンスを使うため
準備する。
ここでは、newメソッドが呼ばれます。
#質問の作成
def new
@question = Question.new
end
Question.newでQuestionのインスタンスを新規に作成し変数@questionに入れます。
次にView側を編集
(ホームビルダーと呼ばれるrails機能を利用します)
<h1>NEW</h1>
<%= form_with model:@question do |form| %>
<div>
<%= form.label :title%><br>
<%= form.text_field :title %>
</div>
<div>
<%= form.label :name%><br>
<%= form.text_field :name %>
</div>
<div>
<%= form.label :content%><br>
<%= form.text_area :content %>
</div>
<div>
<%= form.submit %>
</div>
<%end%>
質問の登録〜コントローラー〜
先ほどNEWで作った内容フォームからsubmitをクリックした後、
データを受け取ってデータベースに保存する処理をするのがcreateメソッド。
さっそく、コントローラーに記述していく。
(フォームから送信されたデータはパラムスというメソッドに入っている)
パラムスの内容を確認してみる
p params
ここでうまくPOSTが機能しない問題に直面。
臨時対応としてエラー要因のURLリクエストの受信を
チェックスルーするように設定。(開発環境のみで推奨)
config.action_controller.forgery_protection_origin_check = false
データベースに保存しよう
def create
#Questionモデルを初期化
#QuestionモデルをDBへ保存
#showへリダイレクト
end
コンソールでデータ保存されたかを確認
Questionテーブルから全ての値を取得する
rails dbconsole
select * from questions;
//結果が表示されたらOK
.q
//コンソール終了
showアクションを実装
入力データの表示します
<h1>Show</h1>
データを入力し、showと表示されれば成功!
URLのidは自動で作成されます。これを取得するにはparamsを使います
試しに、簡易的にshowメソッドで調べてみる
def show
p params
end
newからデータ入力して送信。ターミナルを確認すると、Pメソッドで
IDが取得できた。
paramsから、IDだけ取りたい時には。さっきのコードに[:id]を付け足す
def show
p params[:id]
end
これを応用して、取得した変数@questionに格納されたデータを
pメソッドで出力します。
@question = Question.find(params[:id])
p @question
データベースの操作にactive Recordを使っているので、SQLが自動生成されて
標準統一企画でも賄えない差異を、修正してくれる機能を持っている。
ただ、データベースの[select分]がおかしいなとなったときは
意図しないデータになっていることがあるので、コンソールで調べることを
考えましょう。
アプリが動いているのを確認できたら、次はshowのviewsで
title,name,contentを表示します
title:
<%= @question.title %>
質問一覧表示しよう
まず、viewsを作成
- index.html.erbファイル作成
次に、メソッド定義
def index
# @questionsに全データ取得
end
p paramsで試しに出力。
問題なく返ってきたら、index.htmlにテーブルを作成して表示させる
<table>
<tr>
<th>ID</th>
<th>Table</th>
<th>Name</th>
<th></th>
<th></th>
</tr>
<% @questions.esch do |question| %>
<tr>
<td></td>
<td></td>
<td></td>
<td><% link_to 'show', question_path(question) %></td>
</tr>
<% end %>
</table>
lint_to ではaタグの役割があり、pathを使うとヘルパー機能でリンクが自動生成される。
URLを検証すると、HTMLにはa hrefと変換されている。