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モデルから値を読込み、一番上は空白にする。というものです。 どのように記述すれば保持できるのか色々調べてみたのですが、結局分からず仕舞いでした。。 どうぞ宜しくお願い致します。

  • Ruby
  • 回答数1
  • ありがとう数10

質問者が選んだベストアンサー

  • ベストアンサー
  • sumisyu
  • ベストアンサー率100% (1/1)
回答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"] || '') : '') ソース見た感じだとこんな感じでどうでしょう。

moyashi_1
質問者

お礼

ご回答ありがとうございます。 教えていただいた内容を参考に修正してみたところ、うまく動作できるようになりました! 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

  • VBA IE コンボボックスに値を入れる方法

    こんばんは。 VBAでIEの操作をしています。 --------------------------------------------------------- <tr> <th><span class="asterisk">*</span>&nbsp; <label for="ind">業種:</label></th> <td> <select name="industry" id="ind" tabindex="1800"> <option value="" class="title">[業種を選択]</option> <option value='1'>銀行/金融/不動産 <option value='2'>コンピュータ関係(管理/インターネット) <option value='3'>コンピュータ関係(ハードウエア) </select> </td> </tr> --------------------------------------------------------- 元のソースが↑なのですが、 objIE.document.all("industry")(0).Value = "サービス" としても、[業種を選択]がコンボボックスに投入されてしまいます。 コンボボックスに銀行/金融/不動産を入れる場合は どのようなVBAコードを書けばいいのでしょうか? ご回答よろしくお願いします。

  • コンボボックスの値判定

    コンボボックスの値を判定して、処理を分岐させる方法がわかりません。よろしくお願いします。 VisualBasic .NET2003を使用しています。 Select Case コンボボックス case 0 処理1 case 1      処理2 case 2      処理3 End select

  • アクセスのコンボボックスの値について

    質問させてください。コンボボックスをなにも選んでいない状態の値は何になるのでしょうか?条件として使いたいのですがFALSEでもないしうまくいきません。よろしくお願いします。

  • エクセルVBA コンボボックスの値の転記

    エクセルVBAの質問です。 ユーザーフォームを表示し 年を選択するコンボボックス1 月を選択するコンボボックス2 を入力してもらい ユーザーフォームを閉じるときに sheet1のワークシートのC2セルに 「コンボボックス1の値」+「年」+と「コンボボックス2の値」+「月」をつなげて 入力できるというようなマクロを考えています。 下記の様に考えてみたのですが、 うまく入力できませんでした。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "2021" .AddItem "2022" .AddItem "2023" .AddItem "2024" End With With ComboBox2 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" End With Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 'ユーザーフォームの値をセルC2に入力 With Worksheets("sheet1") .Cells(2, 3).Value = "ComboBox1.Text" & "月" & "ComboBox2.Text" & "日" End With End Sub どのように修正すればいいでしょうか? よろしくお願いします。

  • コンボボックスの値を連動させたい

    コンボボックスの値が変わらずに悩んでいます。 .listindexではプロパティしか確かめられないことがわかりました。 .Textだと直接記述しないといけません。 Select Case ◎◎.ListIndex Case 0 To 5 ××.ボックス.****** Case 6 To 7 ××.ボックス.****** End Select *****のところを別のに変えればなんとかなりそうなんですが、どうすればよいのでしょうか?直接値を代入しない方法で簡単な方法があれば教えてください。

  • コンボボックスに付いて

    エクセル2000を使用しています。コンボボックスに付いて教えて下さい。 今コンボボックス(ユーザーフォーム使用)を12個一組 計5組 にて簡単な選択データを作っています。 コンボボックスの値はシートより読み出し値を表示させているのですが、この12個のコンボボックス1~12みたいな感じで 簡単に一まとめ出来ないでしょうか? 12個一組は内容は同じです。とりあえず一つ一つのコンボボックスに対してシートを参照するようにしましたが、 もっと簡単に簡略化出来ないものなのでしょうか? ご教示お願い致します。初心者ですので例などで教えて頂ければ幸いです。

  • コンボボックスの値もクリアしたい!

    コンボボックスの値もクリアしたい! 現在下記のコードでtxtBoxの値をクリアしていますが、 同フォームにあるコンボボックスの値もクリアしたいのですが解りません。 教えてください。 Public Sub txtクリア(objForm As Object) Dim txtclear As Control For Each txtclear In objForm.Controls If txtclear.ControlType = acTextBox Then txtclear.Value = Null End If Next End Sub

  • コンボボックスに設定する値

    ユーザーフォーム上のコンボボックスに設定する値を ワークシートの入力規則のリストで設定した値から参照するにはどうしたらいいでしょうか? 入力規則の値は、元の値のテキストボックス?に直接入力されているので これをどこかのセル範囲を参照して~というのはナシでお願いします。

  • VBA コンボボックスで選んだ値を取得するには

    ユーザーフォーム上のコンボボックスから値を選択し、その値を変数として使いたいのですが、うまくいきません。 コンボボックスのコードで Private Sub ComboBox1_Change() moji1 = ComboBox1.Text Range("A1").Value = moji1 のようにすれば、コンボボックスから値を選んだ時点でA1セルにその値をコピーできるのですが、同じユーザーフォーム上にあるコマンドボタンをクリックして実行する「マクロ1」にてこのmoji1という変数を使いたいのです。 マクロ1にて、上記と同じ Range("A1").Value = moji1 というコードを記述しても、ユーザーフォームで選択した値が消えており、empty値となってしまいます。 原因をご存知の方はお教えください。

  • ExcelVBAでコンボボックスに初期値設定

    ExcelVBAでユーザーフォームを作成しています。 表示したときにコンボボックスに「選択して下さい」と表示させる方法を教えて下さい。 コンボボックスで「2003年_H15」~「2012年_H24」が選択できて、選択するとラベルに「2002~2004年」のように表示されます。 【コンボボックス:選択】2003年_H15 【ラベル:表示】2002~2004年 コンボボックスの値はSheetから設定しています。 ユーザーフォームを表示させたときにコンボボックスに「選択して下さい」と初期値として設定するにはどうしたらよいか教えて下さい。 Sheetに追加するとかんたんなのですが、ラベルに表示させるために、以下のようなコードを書いていたりするので、うまく動きません。 Private Sub ComboBox_Change() Dim sh As Worksheet Set sh = Worksheets("Sheet1") With ComboBox If .ListIndex >= 0 Then Label.Caption = Left(sh.Cells(.ListIndex + 1, 1), 4) _ & "~" & Left(sh.Cells(.ListIndex + 3, 1), 4) & "年" End If End With End Sub よろしくお願い致します。

専門家に質問してみよう