※ ChatGPTを利用し、要約された質問です(原文:Rails コンボボックスの値の保持について(select_tag,c)
Railsコンボボックスの値の保持方法とは?
このQ&Aのポイント
Ruby on Railsで一覧検索画面を作成中。検索条件にコンボボックスを使用しており、検索後に値を保持したいができない。
コンボボックスの条件はAuthモデルから値を読込み、一番上は空白にする。
select_tagやselectを試したが、どちらも同じ結果。コンボボックスの値が保持できない。
Rails コンボボックスの値の保持について(select_tag,c
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モデルから値を読込み、一番上は空白にする。というものです。
どのように記述すれば保持できるのか色々調べてみたのですが、結局分からず仕舞いでした。。
どうぞ宜しくお願い致します。
お礼
ご回答ありがとうございます。 教えていただいた内容を参考に修正してみたところ、うまく動作できるようになりました! 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 ) %> 大変勉強になりました。 ありがとうございました!