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。关系是用户和企业之间存在habtm。我已经尝试重新排列我的选项,如github issue所示。我也看过一个类似的 stackoverflow question

但是,当我尝试使用 时: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>

注意有两个被选中,多个的代码设置为multiple。有谁知道这是为什么?

另外,我试图弄清楚如何将另一个字段显示为可选字段。

例如,我有 f.inputs :users。有没有办法重命名:users 显示的内容?现在,它显示 users.name,但我想要 users.email。

4

3 回答 3

2

我也刚好碰到这个问题。经过一些代码跟踪后,我发现它与底层的 Formtastic 库是二重奏的。

Formtastic 优先于现有反射(has_many 和 has_and_belongs_to_many)而不是您传入的选项,以决定它是否是多重的。

我认为这是因为在 ?-to-many 关系上强制进行单选会导致一些混乱。就像你的数据一样,已经有两个选中了,严格单选应该显示什么?但我稍后可能会向 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

对于您的第二个问题,您只需将以下代码添加到您的模型中。

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

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

虽然 formtastic 在选项哈希中忽略 :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"

我认为没有任何干净的方法可以在运行时更改标签。您可以通过检查参数哈希中的“动作”值来实现它。因此,例如,当您在新操作上显示此视图时,您可以说

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

希望能帮助到你

于 2012-08-07T07:39:19.720 回答