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

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

ただいまの
回答率

91.35%

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

受付中

回答 1

投稿 2017/12/02 10:57

  • 評価
  • クリップ 0
  • VIEW 24

keimorimoto

score 1

Ruby: 2.4.1
Rails: 5.1.3

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

とりあえず方針を。

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

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

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

こんなふうに書きます。

class SearchItem
  extend ActiveModel::Naming
  include ActiveModel::Conversion

  attr_accessor :keyword, :year

  def persisted?
    false
  end

  def initialize(params)
    # ここの書き方や処理は目的によりさまざま
    self.keyword = params[:keyword]
    self.year = params[:year]
  end
end

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

index アクションでは

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

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

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

検索フォームは

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

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

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

投稿 2017/12/03 20:31

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

ただいまの回答率

91.35%

関連した質問

  • 解決済

    Java DynaActionFormで質問させてください

    DynaActionFormとActionFormの違いについて質問なのですが、どこがどのように違うのでしょうか? 動的か静的か、の差かなとも思ったのですが、ある人に聞いたところ

  • 受付中

    Missing Pramaterに関しての質問

    皆様、質問がございます。よろしくお願い申し上げます。 下記の問題を改善したいため、ご指導頂ければと思います。 予想している改善点 strongparamaterの理解が正しくな

  • 解決済

    PHP $FILESで受け取った文字が文字化け

    何時間もはまってしまいました。 ご存じの方がいれば、ご教授願います。 PHPの$FILESで受け取った段階で文字化けが起きてしまい、困っています。 添付ファイルを $_FILE

  • 解決済

    php mysql pagination

    各カテゴリ一覧にて、各カテゴリに当てられた記事ページ一覧の表示はできていますがそこで各カテゴリーページにて、記事が多い時を想定してページネーションを作ったんですが現在いるカテゴリで

  • 解決済

    PHPでURLにパラメーターを付けずにcookieが有効かどうかを調べる方法

    PHPでcookieが使えるかどうかを調べる方法を探しています。 一般的には、まずcookieを発行し、同一画面にリダイレクトさせ、cookieが残っていれば使えるし、残って

  • 解決済

    Java struts1 ActionFormの使用用途

    java struts1で確認したいことがあります。 ActionFormの使用用途としては画面のパラメータを格納すること に使うと思うのですが、入力画面と確認画面がほぼ

  • 解決済

    動的なリンクの作成

    <dl> <dt>23区南 <li class="all_check"><input type="checkbox"> <label>23区南す

  • 解決済

    Twitterのようなgetメソッドなしのユーザーページ表示について

    Twitterではユーザーそれぞれのページを https://twitter.com/**** というように表示させますが、 私の知識ではユーザーそれぞれのページを u

同じタグがついた質問を見る