0

我正在使用改革gem 并希望创建 2 个对象(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

我能想到解决这个问题的唯一方法是将数据库列之一重命名为“标题”。还有其他方法吗?

4

2 回答 2

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]"

这样可以避免名称冲突。

于 2014-01-05T06:10:22.070 回答
0

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

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

类似的东西有用吗?

于 2013-09-04T12:59:59.860 回答