AR삽질러

初めてのRuby on Rails ミニQ&Aサイト開発 - indexAction, Validation(3) 본문

Ruby/RubyOnRails-日本語

初めてのRuby on Rails ミニQ&Aサイト開発 - indexAction, Validation(3)

아랑팡팡 2024. 1. 4. 12:38
728x90

 

初めてのRuby on Rails ミニQ&Aサイト開発 - indexAction(3)

 

1. indexアクションでユーザーの一覧を表紙する

questions_controller

class QuestionsController < ApplicationController
    # 質問一覧表紙
    def index
        @questions = Question.all
        # p @questions
    end
end

 - indexアクションに 's'がつく理由は、Ruby on Railsで広く使われる慣例(convention)のためです。 RailsはMVC(Model-View-Controller)パターンに従い、各コンポーネントの名前と使用方法がこの慣例によって決まります。

 - 's'が複種系を表して、 'Question'オブジェクトが含まれていることを意味する。

 

@questions = Question.all

 - Questionモデルの全てのレコードをDataBaseから持ってくる。@questionsはこのレコードを含まれた配列。

 

index.html.erb

<h1>Questions</h1>

<table>
    <tr>
        <th>ID</th>
        <th>Title</th>
        <th>Name</th>
        <th>Content</th>
    </tr>
    <% @questions.each do |question| %>
        <tr>
            <td><%= question.id %></td>
            <td><%= question.title %></td>
            <td><%= question.name %></td>
            <td><%= question.content %></td>
            <td><%= link_to 'show', question_path(question) %></td>
        </tr>
    <% end %>
</table>

@questions変数に含まれている 各'Question'オブジェクトに対する情報をTableで表す。

<% @questions.each do |question| %> 

 - @questions配列の各Questionオブジェクトに対し反復する。

<%= question.id %> ...

 - Tableの表に情報を表紙する。

<%= link_to 'show', question_path(question) %>

 - 各行に"show"リンクを追加して、そのQuestionオブジェクトの詳細ページ(showアクション)に移動できるリンクを提供する。

 

実装方式
 - ユーザーがQuestionsのindexページ(例:/questions)をrequestする。
 - indexアクションは、データベースからすべてのQuestionレコードを取得し、@questions変数に割り当てる
 - ビューは@questions配列の各Questionオブジェクトをテーブル形式で表し、各オブジェクトに対する詳細ページへのリンクを提供する。

 


2. Validation

Validationとは?

 - 記述、入力したデータが、あらかじめ規定された条件や仕様、形式などに適合しているかどうかを検証、確認すること。

例)未入力チェック、文字数チェック

 

バリデーションの練習

 - Title : 未入力チェック

 - Name : 未入力チェック

 - Content : 未入力チェック、5文字以上であること

 

question.rb

class Question < ApplicationRecord
    validates :title, presence: true
    validates :name, presence: true
    validates :content, presence: true, length: { minimum: 5 }
end

Questionモデルに有効性検証を作成

 - validates :title, presence: true : titleフィールドが空でないことを示す。

 - validates :content, presence: true, length: { minimum: 5 } : コンポーネント フィールドは空でないだけでなく、少なくとも 5 文字以上でなければならないことを示す。

 

questions_controller.rb

class QuestionsController < ApplicationController
    # 質問の登録
    def create
        # p params
        # p question_params
        # Questionモデルを初期化
        @question = Question.new(question_params)
        # QuetionモデルをDBへ保存
        if @question.save
            # showレダイレクト
            redirect_to @question
        else
            render 'new', status: :unprocessable_entity
        end
    end
    
    private
        def question_params
            params.require(:question).permit(:title, :name, :content)
        end

end

@question=Question.new(question_params):question_paramsメソッドを介してフィルタリングされたパラメータを使用して新しいQuestionオブジェクトを生成します。
if @question.sa ve:@questionオブジェクトをデータベースに保存しようと試みます。 もし有効性検証を通過すると、オブジェクトは保存され、show ページにリダイレクトされます。
else: 有効性検証を通過できない場合は、再びnewテンプレートをレンダリングします。 このとき、ステータスコードで:unprocessable_entityを使用してクライアントにエラーが発生したことを通知します。

 

new.html.erb

<h1>New Question</h1>
<%= form_with(model: @question) do |form| %>
    <% if @question.errors.any? %>
    <% end %>
    <div>
        <ul>
            <% @question.errors.full_messages.each do |message| %>
                <li><%= message %></li>
            <% end %>
        </ul>
    </div>

    <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 %>


https://github.com/designAR/rails_board/tree/index_action_%2303

 

GitHub - designAR/rails_board

Contribute to designAR/rails_board development by creating an account on GitHub.

github.com

 

728x90
반응형
LIST