質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

427閲覧

form_tagにURLのパラメータを初期値としてセットする

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/12/02 01:57

Ruby: 2.4.1
Rails: 5.1.3

form_tagを使って検索機能を実装しています。form_tag送信後は同じページを読み込み、絞り込み検索をした結果を表示します。前画面でチェックしたチェックボックスが、読み込み後チェックが外れてしまいます。他にもテキストフィールドやラジオボタンなどあるのですが、すべて前画面でセットしたパラメータを維持したいのですが、どのようにしたらいいかご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

とりあえず方針を。

例えば Item の一覧表示で絞り込みをしたいとします。
Item には title:string カラムと year:integer カラムがあるとします。

/items にアクセスすると ItemsControllerindex アクションが働く,と。ここで絞り込みをやりたいわけですね。

検索条件を保持する SearchItem モデルを作りましょう。

こんなふうに書きます。

rb:models/search_item.rb

1class SearchItem 2 extend ActiveModel::Naming 3 include ActiveModel::Conversion 4 5 attr_accessor :keyword, :year 6 7 def persisted? 8 false 9 end 10 11 def initialize(params) 12 # ここの書き方や処理は目的によりさまざま 13 self.keyword = params[:keyword] 14 self.year = params[:year] 15 end 16end

ActiveModel::Naming って何?とか,persisted? は何をするもの?というのは,ご自分でお調べになってください(すいません,説明できないだけです)

index アクションでは

rb:controllers/items_controller.rb

1# 抜粋 2 def index 3 @search_item = SearchItem.new(params[:search_item]) 4 @items = Item.search(@search_item) 5 end

みたいにして,@search_item によって絞り込んだ @items を用意します。

Item.search メソッドに実際の検索処理を書きます。

検索フォームは

rb:views/items/index.html.erb

1<%= form_for @search_item, url: :items, html: {method: :get} do |f| %> 2 <%= f.text_field :keyword %> 3 <%# 中略 %> 4<% end %>

みたいな感じですね。
@search_item に対する form_for を使えばいいです。

以上,実際に動かさないで適当にコード書いてますので,ちょっと間違ってたらゴメンなさい。

投稿2017/12/03 11:31

scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問