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

Ruby 如何在简单表单输入中使用方法而不在表单中提交?,ruby,ruby-on-rails-3,nested-forms,simple-form,Ruby,Ruby On Rails 3,Nested Forms,Simple Form,好的,这个应该已经在这里的某个地方了,但我找不到 我正在用simple_form构建一个表单,我正在使用一个虚拟的单选输入,它的值基于我的“Price”模型中的一个方法(名为“simple”)。这些方法查看是否使用了某些属性,如果使用了,则返回false。这样,如果没有使用高级输入,我可以在表单中隐藏它们。 我想使用simple_form,以便将该方法连接到正确的对象,因为可以在相同的表单中生成(和创建)更多的价格。 我使用单选按钮(和javascript),因此用户仍然可以取消隐藏高级字段 问

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

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

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

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

哈姆表格

= 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

谢谢你的反馈

如果将
simple?
重命名为
is\u 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
然后用:你的形式简单吗

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

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

Cool!我还需要将它添加到“attr_accessible”中,但除此之外,它就像一个符咒!谢谢,我自己不会找到这个的。你知道这些东西是在哪里记录的吗?再次感谢。很高兴听到我的回答很有帮助。当表单中的一个字段应该触发控制器或模型中的某些操作,而不是作为值本身存储时,我经常使用“虚拟属性”。当我记忆犹新的时候,我第一次听说VA就在这里:在最早的一个铁路公司。