我正在使用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。
答案 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%>
希望有所帮助