dポイントプレゼントキャンペーン実施中!

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モデルから値を読込み、一番上は空白にする。というものです。

どのように記述すれば保持できるのか色々調べてみたのですが、結局分からず仕舞いでした。。

どうぞ宜しくお願い致します。

A 回答 (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"] || '') : '')

ソース見た感じだとこんな感じでどうでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

教えていただいた内容を参考に修正してみたところ、うまく動作できるようになりました!

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 ) %>

大変勉強になりました。
ありがとうございました!

お礼日時:2010/05/17 17:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!