simple_form:不同类的集合

时间:2014-05-28 04:36:07

标签: ruby-on-rails ruby ruby-on-rails-3 simple-form

我在simple_form select字段中收集了不同的类,我需要能够识别集合中的哪个类。目前我已经得到了这个:

<%= f.input :image,
  label: 'Image',
  collection: share_document.document.images,
  label_method: :name, value_method: :id,
  prompt: 'Default image based on content' %>

而且share_document.document.images是这样的:

# document.rb
...

def images
  images = []
  images << cover if cover
  publications.each { |p| images << p.component }
  images << photo if photo
  images
end

但当然coverscomponentsphotos都可以拥有相同的ID。我想将simple_form的value_method:更改为"#{class}_#{id}".to_sym或类似内容,以便表单生效。

关于如何实现这一目标的任何想法?感谢。

1 个答案:

答案 0 :(得分:1)

看起来value_method接受lamba&#39; s这样的事情可以起作用:

value_method: ->(image) { "#{image.id}-#{image.class}" }

更好的方法是使用自定义连接在所有类上定义image_key方法,然后执行:

value_method: :image_key