不尊重ActiveAdmin表单:multiple =>假

时间:2012-07-30 18:59:30

标签: ruby-on-rails-3 activeadmin formtastic

我正在使用ActiveAdmin并尝试执行以下操作::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所示。我还看了similar 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.name,但我想要users.email。

3 个答案:

答案 0 :(得分:2)

我也碰到了这个问题。经过一些代码跟踪后,我发现它与底层的Formtastic lib结合了。

Formtastic优先于现有的反射(has_many&amp; has_and_belongs_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

答案 1 :(得分:1)

虽然formtastic忽略:multiple =&gt;如果在选项哈希中为true,则它会在input_html选项中尊重它。放手一搏:

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

答案 2 :(得分:0)

我不确定我是否正确理解你的问题。是否要仅更改输入元素的标签,还是要更改显示的属性类型?如果它只是标签值,那么你可以使用

f.inputs:users,:label =&gt;“电子邮件”

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

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

希望有所帮助