0

好的,这应该已经在这里的某个地方,但我找不到它。

我正在使用 simple_form 构建一个表单,并且我正在使用一个虚拟无线电选择输入,其值基于我的“价格”模型中的一种方法(名为“简单?”)。这些方法查看是否使用了某些属性,如果使用则返回 false。这样,如果不使用它们,我可以隐藏表单中的高级输入。我想使用 simple_form 以便将该方法连接到正确的对象,因为可以以相同的形式制作(和创建)更多价格。我使用单选按钮(和 javascript),因此用户仍然可以取消隐藏高级字段。

问题是当我提交表单时,表单包括 :simple? 方法被提交,它返回错误,因为它只是一个方法。

问题是:我如何确保':简单?的值不是通过表单提交的,而是初始化为正确的值?还是有更聪明的方法来做到这一点?

表单.haml

= f.input :simple?, as: :radio, label: "Simple price?"

价格.rb

  def simple?
    true unless advanced?
  end

  def advanced?
    specific_days? || period_id? || description? || begin_time? || end_time?
  end

感谢您的任何反馈!

4

1 回答 1

0

如果你重命名simple?is_simple你可以在你的模型中实现一个虚拟属性

def is_simple
  true unless advanced?
end

def is_simple= _ignored
  # NOOP
end

def advanced?
  specific_days? || period_id? || description? || begin_time? || end_time?
end

然后在您的表单中使用 :is_simple

= f.input :is_simple, as: :radio, label: "Simple price?"

重命名是必要的,因为def simple?=会导致语法错误。

于 2013-08-24T21:06:20.687 回答