2

私は ActiveAdmin を使用していて、 as: を実行しようとしていますが:select:collectionこれは複数選択ではありません。

私のコードは次のとおりです。

form do |f|
  f.input :users, :as => :select, :input_html => { :size => 1}, :multiple => false, collection: User.where(role:1), include_blank: false
end

これはどこにありますか/admin/businesses.rb。その関係は、ユーザーとビジネスの間に習慣があるということです。github issueに示されているように、オプションを再配置しようとしました。同様のスタックオーバーフローの質問も見ました。

ただし、 を試してみると、:multiple => false次のコードが生成されます。

<select id="business_user_ids" multiple="multiple" name="business[user_ids][]" size="1">    
<option value="4">Pilgrim</option>
<option value="5" selected="selected">Mary</option>
<option value="6" selected="selected">Bob</option>
<option value="7">Billy</option>
<option value="8">Ash</option></select>

2 つが選択されており、複数のコードが に設定されていることに注意してくださいmultiple。これがなぜなのか知っている人はいますか?

また、選択可能なものとして別のフィールドを表示する方法を理解しようとしています。

たとえば、f.inputs :users があります。:users に表示されているものの名​​前を変更する方法はありますか? 現在、users.name と表示されていますが、users.email が必要です。

4

3 に答える 3

2

私もこの問題にぶつかりました。少しコードをトレースした後、基盤となる Formtastic lib とのデュオであることがわかりました。

Formtastic は、渡すオプションよりも既存のリフレクション (has_many & has_and_belongs_to_many) を優先して、複数かどうかを決定します。

?対多の関係で単一選択を強制すると、混乱が生じるためだと思います。あなたのデータと同じように、すでに 2 つが選択されています。厳密な単一選択では何を表示する必要がありますか? しかし、後でこの問題を Formtastic に提起するかもしれません。

その機能がまだ必要な場合は、config/initializers/formtastic.rb に次のコードを配置して、モンキー パッチを適用できます。

module Formtastic
  module Inputs
    class SelectInput
      def multiple_with_options_fix?
        return false if options[:multiple] === false
        multiple_without_options_fix?
      end

      alias_method_chain :multiple?, :options_fix
    end
  end
end

2 番目の質問については、次のコードをモデルに追加するだけです。

class User < ActiveRecord::Base
  .....

  def to_label
    self.email
  end
end
于 2012-08-02T04:59:27.330 に答える
2

formtastic は options ハッシュでは :multiple => true を無視しますが、input_html オプションでは尊重します。これを試してください:

f.input :users, :as => :select, :input_html => { :size => 1, :multiple => false }, :multiple => false, collection: User.where(role:1), include_blank: false
于 2014-11-05T06:00:27.107 に答える
0

あなたの問題を正しく理解しているかどうかわかりません。入力要素のラベルだけを変更したいですか、それとも表示される属性のタイプを変更したいですか? ラベル値だけの場合は、使用できます

f.inputs :users, :label="Email"

実行時にラベルを変更するきれいな方法はないと思います。params ハッシュの「action」値をチェックすることで、おそらくそれを達成できます。たとえば、新しいアクションでこのビューを表示するときは、次のように言うことができます

<% if params[:action]="new"%>
f.inputs :users, :label=>"Email"
<%else%>
f.inputs :users, :label=>"Name"
<%end%>

それが役に立てば幸い

于 2012-08-07T07:39:19.720 に答える