Rails Formtastic:使用相关表中的值将“data-”字段添加到选项标记

时间:2013-10-09 20:56:54

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

感谢Rails Formtastic: adding "data-" field to option tag我得到了一个简单的解决方案,可以将我的ActiveAdmin表单中的选项添加到数据中。但是,现在我想从不同的表(模型)中获取数据值。我是一个全新的铁杆新手,试图在我走的时候解决问题,希望有人能指引我。

所以,我的ActiveAdmin表单中有这个:

att.input :attribute, :label => "Attribute:", :as => :select, :collection => AttributeDefinition.all.map { |adef| [adef.attribute_name, adef.id, {:"data-type" => AttributeInputType.where(:id => adef.input_type_id).select("input_type") } ] }

我希望最终得到的是一个选择元素,其中包含以下选项:

<option data-type="dropdown" value="4">Voltage</option>

但相反,我得到这样的选择:

<option data-type="#<ActiveRecord::Relation:0x6adb3f8>" value="4">Voltage</option>

这适用于产品型号,has_many :attribute_definitions, through: :product_attributes和每个AttributeDefinition belongs_to :input_type, class_name: "AttributeInputType"。所以我试图到达AtributeInputType的input_Type字段(字符串),该字段匹配AttributeDefinition(上面的adef.input_type_id)的input_type_id。

我可以获取ID,并且数据类型属性生成正常,所以我认为我的问题只是基本不知道如何通过ID拉取该字符串字段。任何人都可以指出我正确的方向? 谢谢!

1 个答案:

答案 0 :(得分:0)

替换此

AttributeInputType.where(:id => adef.input_type_id).select("input_type")

adef.input_type.input_type

adef.input_type返回与AttributeInputType相关联的adef对象。 .input_type返回input_type对象的AttributeInputType属性。

如果adef没有任何input_type,则上述语句会引发错误。所以更强大的选择是

 adef.input_type.try(:input_type)
如果找不到关联的对象,

try将返回nil