18
3

More than 1 year has passed since last update.

【Ruby on Rails】愛犬管理アプリpart3 ~体調管理編~【初心者向け】

Last updated at Posted at 2022-09-10

はじめに

この記事は、こちらの記事の続編です。
まだご覧になっていない方は是非ご覧ください。

実装内容

本記事では、簡単なCRUDアプリの作成と、検索機能の付与を行います。

手順は以下になります。
①体調に関するCRUD機能を持ったアプリケーションの作成
②体調に関するキーワードで検索できる機能の作成
③体調ペットの表示&体調を登録したユーザーの表示

スクリーンショット 2022-09-12 午前10.15.40.png

ではさっそく実装していきましょう。

①体調に関するCRUD機能を持ったアプリケーションの作成

以下のコマンドを実行してください。
③、④の機能の実装のために、アソシエーションが必要なので、外部キーも設定しておきます。

terminal
$ rails g scaffold Health user:references pet:references title:string content:text   

完了したらrails db:migrateをしましょう。
これで、CRUD機能を持ったアプリケーションができました。

②体調に関するキーワードで検索できる機能の作成

  • ルーティング定義
  • 検索フォームの作成
  • コントローラーへの追記
  • モデル内に検索方法を記載

ルーティング定義

routes.rbに以下を追記します。

config/routes.rb
get 'search' => 'healths#search'

healthコントローラーのsearchアクションが実行されるよう定義しました。

検索フォームの作成

app/views/healths/index.html.erb
  <div class="search-form">
    #検索内容を、先ほど作成したルーティングに送信
    <%= form_with url: search_path, method: :get, local: true do |f| %>
       #検索内容を、keywordとしてアクションに送信
      <%= f.text_field :keyword, value: @keyword %>
      <%= f.submit "検索" %>
    <% end %>
  </div> 

コントローラーへ追記

ヘルスコントローラーへサーチアクションを定義します。

app/controllers/healths_controller.rb
  def search
    #検索モデルの定義
    @keyword = params[:keyword]
    #検索されたワードを表示するよう設定
    @healths = Health.search(params[:keyword])
    render "index"
  end

モデル内に検索方法の定義

モデルに以下を追記します。

app/models/health.rb
 def self.search(keyword)
    where(["title like? OR content like?", "%#{keyword}%", "%#{keyword}%"])
  end

検索をかけるキーワードを設定します。
上記のように設定することで、入力したワードに該当する"title"、"content"のデータを取得します。

③体調ペットの表示&体調を登録したユーザーの表示

二つのファイルに追記します。

  • new.html.erb
  • index.html.erb

new.html.erb

app/views/healths/index.html.erb
#ここから追記
  <div class="field">
    <%= form.label :ペット名 %><br>
    <%= form.collection_select(:pet_id,@pets,:id,:name)%>
  </div>
   #今ログインしているユーザーの情報をuser_idのカラムに追加する。
  <%= form.hidden_field :user_id, :value => current_user.id %>
#ここまで追記

index.html.erb

app/views/healths/index.html.erb
#追記
<td><%= health.pet.name %></td>
<td><%= health.user.name %></td>

既にアソシエーションの定義、pet_id、user_idのカラムの追加を行っているので、上記のコードを追記すれば、ペットの名前を取得できます。

終わりに

part1,part2で複雑な処理は済ましてしまっていたので、part3は簡単でしたね!
以上でオリジナルアプリケーションの全ての実装の解説が完了です。
まだまだ磨きをかけて、使いやすいアプリを目指します!

18
3
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
18
3