2
1

More than 1 year has passed since last update.

65歳、初心者がrailsに検索機能を

Last updated at Posted at 2023-05-07

はじめに

rails初心者が検索機能の実装に挑戦しました。
個人的な記録なので、あくまでに参考にする程度でお願いいたします。
環境は以下です。
mac
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin22]
Rails 7.0.4.3

[参考にさせていただいたもの]"https://abillyz.com/moco/studies/649")

アプリの作成

ターミナル
rails new To_do
--To_doアプリが作成されたら--
cd To_do
--上記のコマンドでTo_doディレクトリに移動--

scaffoldでtitleとcontent,starttime,endtime及びlimeを作成

カラムには、更なるバージョンアップのため、同時に日付を作成しておりますが、その検索はここではできません。

ターミナル
rails generate scaffold Task title:string content:string starttime:datetime endtime:datetime limit:datetime

下記を確認

ターミナル
--テーブルとカラムを作成するファイルの生成を確認--
ls -1FA db/migrate
20○-----------○_create_tasks.rb
--以下で上記ファイルの中身を確認--
nano db/migrate/20○-----------○_create_tasks.rb
ターミナルに表示された中身
class CreateTasks < ActiveRecord::Migration[7.0]
  def change
    create_table :tasks do |t|
      t.string :title
      t.string :content
      t.datetime :starttime
      t.datetime :endtime
      t.datetime :limit

      t.timestamps
    end
  end
end
--支障なしの場合、Cnt + x の次に n
   変更がある場合については調査中--

seedデータ作成準備と検索機能実装の準備

Gemfile(拡張子の記載なし)に以下を追加する。

Gemfileの中身
--faker を利用ため、Gemfile の最後に以下を追記--
gem 'faker'
gem'ransack'
    --2段目の'ransack'は、検索用のものをついでに追加--
ターミナル
bundle install

seedデータの作成

 db/seeds.rbに以下を書き込む

seed.rbの中身
20.times do |n|
    Task.create!(
      title: Faker::Book.title,
      content: Faker::Name.name,
      starttime: "Thu, 04 May 2023 20:18:00 JST +09:00",
      endtime: "Thu, 04 May 2023 20:18:00 JST +09:00",
      limit: "Thu, 04 May 2023 20:18:00 JST +09:00"  
    )
  end

データベース、テーブル及びseedデータの作成

ターミナル
    rails db:create 
   rails db:migrate
   rails db:seed
 --seedデータの作成は成功の表示がないので以下で確認--
 rails s
 --一覧表示があれば成功している--
 --上手くいかない場合、最初にrails db:dropを実施--

コントローラの実装

app/controller/tasks_controller.rbのdef indexの中身を変更する。

tasks_controller.rb
   def index
    @q = Task.ransack(params[:q])
    @tasks = @q.result
  end

ビューの実装

app/views/tasks/index

index.html.rb
<h1>Tasks</h1>
--間に挿入--
<%= search_form_for @q do |f| %>
  <%= f.label :title_cont, 'title' %>
  <%= f.search_field :title_cont %>
  <%= f.label :content, '内容' %>
   <%= f.search_field :content_cont %>
 <%= f.submit %>
<% end %>
<%= link_to '一覧を出す', tasks_path %>
--間に挿入--
 <div id="tasks"> 

modlesの実装

 app/modeles/task.rbの中身

task.rb
class Task < ApplicationRecord
    def self.ransackable_associations(auth_object = nil)
        ['title', 'content']
   
    end
    def self.ransackable_attributes(auth_object = nil)
        ['title', 'content']
    end
end

動作の確認

ターミナル
 rails s
 --新規作成や検索が動くことを確認--

最後に

 railsに独学で挑戦して、半年、いつまで経っても、初心者の高齢者が悪戦苦闘して、なんとかできたものの記録です。
 どなたかのお役に立てれば幸いです。

ps datetimeは非推奨となっているらしいので、複雑な操作を追加する場合は留意が必要なようです。

2
1
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
2
1