如何在simple_form输入中使用方法而不在表单中提交它?

时间:2013-08-24 20:42:31

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

好的,这应该已经在某处了,但我找不到它。

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

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

问题是:如何确保':简单?'不是通过表单提交的值,而是启动到正确的值?或者有更聪明的方法吗?

form.haml

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

price.rb

  def simple?
    true unless advanced?
  end

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

感谢您的反馈!

1 个答案:

答案 0 :(得分: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?=会导致语法错误。