当遇到二进制字段时,Rails会形成标记错误

时间:2011-12-10 00:06:39

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

我的“users”表中有binary列类型,当我尝试在simple_form_for标记中包含该字段时,出现错误。

= simple_form_for @user
  = f.input :secret_number

这是错误 -

No input found for binary

一些可能有用的额外信息 - 因此我在此列中存储了一些加密信息。在保存ActiveRecord时加密数据。但是以呈现给用户的形式我想要显示填充数据,例如 - ***** 456“。我已经编写了以下方法来解密/填充secret_number。

def secret_number
  decrypt_and_pad_up(self.secret_number)
end

1 个答案:

答案 0 :(得分:3)

您可以在SimpleForm::FormBuilder#find_mapping中查看错误发生的位置。您收到此错误的原因是因为simple_form询问Rails给定属性包含哪种类型的数据 - 在这种情况下为:binary(Rails不知道或不关心您覆盖secret_number方法) - 为了决定要生成什么类型​​的表单字段。由于无法知道二进制属性应该使用哪种表单字段,因此会出现此错误。

当然,解决方案是in the docs。如果要将其显示为文本输入,请使用:as选项:

f.input :secret_number, :as => :string