0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

質問アプリの作成 #2

Posted at

ビューを作る

ターミナルで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ページの表示
スクリーンショット 2024-10-01 19.57.55.png

質問の登録〜コントローラー〜

先ほど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と変換されている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?