0

私のレールフォームでは、複数選択タグを使用しています

コードは次のようになります

  <%= select_tag '[mycontroller][users]', @users, { :multiple => true, :size => 7} %>
  <p><%= submit_tag l(:button_apply)%></p>

フォーム送信時に渡されるパラメータは

 mycontroller[users][]=79&mycontroller[users][]=80&commit=Apply

私のビューファイルでは、パラメータを取得すると文字列に変換されるため、[79,80] が "7980" に変換されます。

ユーザーパラメータを取得するコードは次のようになります

users =  params[:mycontroller][:users] unless params[:mycontroller].nil? 

編集

問題は、「#{}」が配列を文字列に変換することだと思います。<%= %> でも to_s を呼び出します

では、これをオーバーライドするにはどうすればよいでしょうか。to_s が「7980」ではなく「79,80」を返すように

私は何が欠けていますか?コメントをお願いします。

サンクス。

4

3 に答える 3

3

オーバーライドto_sは非常に手間がかかるようです。

各要素を個別に表示する配列を反復処理することができます (通常、要素ごとに複雑なものを提示している場合は読みやすくmy_array.join(',')、配列要素をカンマで区切りたい場合は次のようなものを使用します。

于 2012-04-07T09:33:22.677 に答える
1

array.join(",") を呼び出すと、[79,80] の配列が "79,89" のような文字列になるはずです。

Ruby Join メソッド

于 2012-04-07T09:35:02.207 に答える
0

Array.join が文字列を返すことを知らないので、独自の方法で解決しようとしていました。これは効率的/効果的ではないかもしれませんが、回避策です。

arr = [79,80]
a =arr.inject(0){|op,i| op.to_s + i.to_s + ","}.to_s  
a[1,a.length-2] # "79,80"
于 2012-04-07T09:43:59.700 に答える