はじめに
この記事は、こちらの記事の続編です。
まだご覧になっていない方は是非ご覧ください。
実装内容
本記事では、簡単なCRUDアプリの作成と、検索機能の付与を行います。
手順は以下になります。
①体調に関するCRUD機能を持ったアプリケーションの作成
②体調に関するキーワードで検索できる機能の作成
③体調ペットの表示&体調を登録したユーザーの表示
ではさっそく実装していきましょう。
①体調に関するCRUD機能を持ったアプリケーションの作成
以下のコマンドを実行してください。
③、④の機能の実装のために、アソシエーションが必要なので、外部キーも設定しておきます。
$ rails g scaffold Health user:references pet:references title:string content:text
完了したらrails db:migrateをしましょう。
これで、CRUD機能を持ったアプリケーションができました。
②体調に関するキーワードで検索できる機能の作成
- ルーティング定義
- 検索フォームの作成
- コントローラーへの追記
- モデル内に検索方法を記載
ルーティング定義
routes.rbに以下を追記します。
get 'search' => 'healths#search'
healthコントローラーのsearchアクションが実行されるよう定義しました。
検索フォームの作成
<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>
コントローラーへ追記
ヘルスコントローラーへサーチアクションを定義します。
def search
#検索モデルの定義
@keyword = params[:keyword]
#検索されたワードを表示するよう設定
@healths = Health.search(params[:keyword])
render "index"
end
モデル内に検索方法の定義
モデルに以下を追記します。
def self.search(keyword)
where(["title like? OR content like?", "%#{keyword}%", "%#{keyword}%"])
end
検索をかけるキーワードを設定します。
上記のように設定することで、入力したワードに該当する"title"、"content"のデータを取得します。
③体調ペットの表示&体調を登録したユーザーの表示
二つのファイルに追記します。
- new.html.erb
- index.html.erb
new.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
#追記
<td><%= health.pet.name %></td>
<td><%= health.user.name %></td>
既にアソシエーションの定義、pet_id、user_idのカラムの追加を行っているので、上記のコードを追記すれば、ペットの名前を取得できます。
終わりに
part1,part2で複雑な処理は済ましてしまっていたので、part3は簡単でしたね!
以上でオリジナルアプリケーションの全ての実装の解説が完了です。
まだまだ磨きをかけて、使いやすいアプリを目指します!