如何使用具有两个共享相同列名称的模型的改造gem

时间:2013-09-04 12:40:31

标签: ruby-on-rails

我正在使用Reform gem并想要创建两个具有'name'属性的对象(一个Foo实例和一个Bar实例):

class MarflarForm < Reform:Form
    include DSL
    include Reform::Form::ActiveRecord

    property :name, on: :foo
    property :name, on: :bar
end

但出于显而易见的原因,我无法做到这一点:

= simple_form_for @form do |f|
  = f.input :file
  = f.input :file

我能想到解决这个问题的唯一方法是将其中一个数据库列重命名为'title'。还有另一种方式吗?

2 个答案:

答案 0 :(得分:1)

它很简单,为实现这个目标,请使用:

class MarflarForm < Reform:Form
    include DSL
    include Reform::Form::ActiveRecord

    property :name, on: :foo
    property :name, on: :bar
end

并在视图中

= simple_form_for @form do |f|
  = f.input "foo[name]"
  = f.input "bar[name]"

避免名称冲突。

答案 1 :(得分:0)

我从未使用过改革宝石,但它看起来像你可以随意调用属性。所以试试

property :foo_file, on: :foo
property :baz_file, on: :baz

然后,在保存时,您只需要负责将这些属性映射回正确的模型属性。

@form.save do |data, nested|
  @foo.file = nested[:foo_file]
  @baz.file = nested[:baz_file]
  # etc...
end

这样的事情有用吗?