AR삽질러

初めてのRuby on Rails ミニQ&Aサイト開発 - create, show(2) 본문

Ruby/RubyOnRails-日本語

初めてのRuby on Rails ミニQ&Aサイト開発 - create, show(2)

아랑팡팡 2024. 1. 3. 16:49
728x90

 

初めてのRuby on Rails ミニQ&Aサイト開発 - 環境構築- create(2)

 

questions_controller.rb

class QuestionsController < ApplicationController
    def index
    end

    def show
    end

    def new
        @questions = Question.new
    end

    def create
        # p params
        p question_params
    end

    def edit
    end

    def update
    end

    def destroy
    end

    private
        def question_params
            params.require(:question).permit(:title, :name, :content)
        end

end

p params, p question_params

 - pメソッドはRudyでオブジェクトの情報を出力する時に使う。

p params

 - HTTPから受けたパラメータをデバッグ目的で、pメソッドは、Rubyからオブジェクトの情報を出力するために使用。

p question_params

 - Strong Parametersを使って特定のフィールドのみを許可するようにフィルタリングする。

 

question_paramsメソッド

 - RailsのStrong Parameters機能を使うprivateメソッド。

 - params.require(:question) : paramsオブジェクトで :questionキーを必要にし、キーがないとエラーが発生する。

 - permit(:title, :name, :content) : :questionキーの中で :title, :name, :contentフィルドだけを許可する。

 


createアクション

class QuestionsController < ApplicationController
    def new
        @questions = Question.new
    end

    # 質問の登録
    def create
        # p params
        # p question_params
        # Questionモデルを初期化
        @question = Question.new(question_params)
        # QuetionモデルをDBへ保存
        @question.save
        # showレダイレクト
        redirect_to @question
    end

    private
        def question_params
            params.require(:question).permit(:title, :name, :content)
        end
end

 @question = Question.new(question_params)

 - question_paramsメソッドを通じてフィルタリングされたパラメータを使って新しい 'Question'を生成する。

@quesion.save

 - 生成された 'Question'オブジェクトをDataBaseに保存する。

redirect_to @question

 - 保存された 'Question'オブジェクトのshowアクションにリダイレクトする。

 

rails dbconsole

sqlite> select * from questions;
1|bbb|aaa|ccc|2024-01-03 07:07:46.884429|2024-01-03 07:07:46.884429

showアクション

class QuestionsController < ApplicationController
    def show
        # p params[:id]
        @question = Question.find(params[:id])
        p @question
    end
end
Processing by QuestionsController#show as TURBO_STREAM
  Parameters: {"id"=>"4"}
  Question Load (0.1ms)  SELECT "questions".* FROM "questions" WHERE "questions"."id" = ? LIMIT ?  [["id", 4], ["LIMIT", 1]]
  ↳ app/controllers/questions_controller.rb:7:in `show'
#<Question id: 4, name: "bbb", title: "aaa", content: "ccc", created_at: "2024-01-03 07:23:36.480568000 +0000", updated_at: "2024-01-03 07:23:36.480568000 +0000">
  Rendering layout layouts/application.html.erb
  Rendering questions/show.html.erb within layouts/application
  Rendered questions/show.html.erb within layouts/application (Duration: 0.4ms | Allocations: 85)
  Rendered layout layouts/application.html.erb (Duration: 3.3ms | Allocations: 2346)
Completed 200 OK in 7ms (Views: 4.3ms | ActiveRecord: 0.1ms | Allocations: 3858)

 

showアクションの実装

 - QuestionsController#show アクションは params[:id]を使って Questionオブジェクトを探す。

 - params[:id]に 'id'の値が渡され、IDに当たる 'Question'オブジェクトをDataBaseから検索する。

 

オブジェクト検索

 - @question = Question.find(params[:id]) コードはDataBaseからIDが"id"に当たる 'Question'オブジェクトを探し、'@question'変数に割り当てる。

 - 検索された情報はlogに出力される。

 

 

class QuestionsController < ApplicationController
    def show
        @question = Question.find(params[:id])
    end
end
<h1>New Question</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 %>

 - <%= @question.title %>, <%= @question.name %>, <%= @question.content %>は @questionオブジェクトの title, name, content属性をレンダリングする。

 - @questionオブジェクトはshowアクションでデータベースで検索され割り当てられ、そのオブジェクトの各プロパティ値はshow.html.erbビューでユーザーに表示される。

 

動作プロセスの要約
 1) ユーザーが特定のQuestionオブジェクトの詳細ページを要求する(例:/questions/1)。
 2) ルーティング システムは、このリクエストをQuestions Controllerのshowアクションにマッピングする。
 3) showアクションは、params[:id]を使用して要求されたQuestionオブジェクトを探す。
 4) 見つかったオブジェクトは@questionインスタンス変数に保存され、show.html.erbビューに配信する。
 5) show.html.erbビューは@questionオブジェクトの各プロパティを使用して詳細情報を画面に表示する。


https://github.com/designAR/rails_board/tree/create_question_%2302

 

GitHub - designAR/rails_board

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

github.com

 

728x90
반응형
LIST