好的,这应该已经在某处了,但我找不到它。
我正在使用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
感谢您的反馈!
答案 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?=
会导致语法错误。