
Rails コンボボックスの値の保持について(select_tag,collection_select)
こんにちは。
Ruby on Railsで簡単な一覧検索画面を作成中の者です。
検索時の検索条件にコンボボックスを使用しており、検索後にコンボボックスの値を保持したいのですが、どうしてもできません。
どなたかお分かりの方がおられましたらご教授いただけないでしょうか。
下記、作成中のソースです。
Viewの検索条件部
<%- form_tag({:action => "search"},{:method=> "GET"}) do -%>
<th class="U" align="left" width="10%"><label for="userNm">ユーザー名</label></th>
<td width="90%"><%= text_field_tag :userNm, @userNm %></td>
<th class="U" align="left" width="10%"><label for="authCd">社員権限</label></th>
<td width="90%">
<%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, :include_blank => true) %>
<td align="center"><%= submit_tag '検索' %></td>
Controllerクラス:
def search
#画面パラメータから検索条件を作成
c = Condition.new
# ユーザー名
userNm = ""
if params[:userNm]
userNm = params[:userNm]
c.and "USER_NM", "LIKE", "%#{userNm}%"
end
# コンボボックスの値を取得
if params[:auth] && !params[:auth]["authCd"].blank?
c.and "AUTH_CD", params[:auth]["authCd"]
end
# 検索処理
@users = User.paginate(:order => "USER_ID asc",
:per_page => 5,
:page => params[:page],
:conditions => c.where)
# 検索条件保持
@userNm = params[:userNm]
# コンボボックスの値が保持できない
if params[:auth]
@auth_authCd = params[:auth]["authCd"]
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
end
end
見づらくて申し訳ありませんが、ざっと上記のようになっています。
もう1つの検索条件であるユーザー名(userNm)は保持できるのですが、コンボボックス(社員権限)の値が保持できません。
select_tagや、selectも使ってみたのですが、どちらも同じ結果でした。
コンボボックスの条件は、Authモデルから値を読込み、一番上は空白にする。というものです。
どのように記述すれば保持できるのか色々調べてみたのですが、結局分からず仕舞いでした。。
どうぞ宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
オプションのselectedにid値と一致する値をセットすると反映するので
<%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, :include_blank => true) %>
を
<%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, {:selected => @auth_authCd.to_i, :include_blank => true } ) %>
Controllerで@auth_authCdが宣言されないとViewでエラーが起きるので
if params[:auth]
@auth_authCd = params[:auth]["authCd"]
end
を
@auth_authCd = (params[:auth].present? ? (params[:auth]["authCd"] || '') : '')
ソース見た感じだとこんな感じでどうでしょう。
ご回答ありがとうございます。
教えていただいた内容を参考に修正してみたところ、うまく動作できるようになりました!
collection_selectだと、:selected がうまく動作しないらしく、下記のようにselectを使用したら値を保持できました。
<%= select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD").collect
{|p| [ p.AUTH_NM, p.id ] }, :selected => @auth_authCd.to_i, :include_blank => true ) %>
大変勉強になりました。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
パソコンのスクリーンセーバー...
-
pandasでsqlite3にテーブル作成...
-
英数字を含む文字列(0-9,A-Z)...
-
(再質問)エクセルのマクロボ...
-
100万件越えCSVから条件を満た...
-
C言語の入力した文字を反転させ...
-
WIN11にオフイスを複数入れるこ...
-
Accessで文字列のバイト数読み込み
-
回復ドライブとインストールメ...
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ルビー言語 ライブラリー
-
Ruby 変数 用途と違い
-
WinSCPで画像のように puttyを...
-
教えてください
-
プログラミングについてです。...
-
pythonエラー
-
WSLのUbuntuで、Railsのインス...
-
ruby while式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10円未満を切り捨てる方法は?
-
foreach内でのデータベース登録
-
「arg」は何の略?
-
get() と find() の違いについて
-
エラー「メソッドまたはデータ...
-
教えてください。vb5.0
-
エクセルVBA オートフィルタで...
-
実行時エラー450:引数の数が一...
-
クラス名やモジュール名の競合...
-
VBAで型が一致しないエラー(バ...
-
HSTLやSSTL等のI/Oピン
-
What class are you in? には何...
-
Csvファイルの最終行を取得する...
-
例外の再スロー時に、その原因...
-
新たに定義したクラスでmapを作...
-
Access2000にExcel2000のデータ...
-
子クラスのインスタンスから親...
-
関数の引数に複数のユーザ定義...
-
Ruby on Rails 「attr_accessor...
-
Ruby Selenium 要素の待機
おすすめ情報