我正在从事的项目是在 Rails 上使用 haml 标记来开发的。有一个简单形式的视图,如下所示:
= simple_form_for @message, url: [:admin, @request, @message], html: { class: 'form vertical-form} do |f|
= f.input :text, as: :text, input_html: { class: 'form-control', rows: 5 }
%br
= f.input :link_url, input_html: { class: 'form-control'}
%br
- if @message.has_picture_image?
= f.label :image
=link_to @message.picture_image, target: "_blank" do
= image_tag @message.picture_image(:thumb)
= f.file_field :image, class:'imagen-button'
= f.input_field :remove_picture, as: :boolean, inline_label: 'Remove'
%br
.form-actions
= f.submit(t('accept'), class: 'btn btn-large btn-primary')
= link_to(t('cancel'), [:admin, @message.request, @message], class: 'btn btn-large btn-danger')
在消息模型中有以下方法:
def remove_picture
self.picture.destroy
end
input_field
用于检查是否要删除消息图像(如果存在)。我知道这input_filed
让我可以选择检查它,以便当我单击accept
按钮时,它会调用消息模型中的 remove_picture 方法。但是,在浏览器部署表单之前,它会出现下一个错误:
undefined method `to_i' for #<Picture:0x007f7675162b58>
Extracted source (around line #39):
37: = image_tag @message.picture_image(:thumb)
38: = f.file_field :image, class:'imagen-button'
39: = f.input_field :remove_picture, as: :boolean, inline_label: 'Remove'
40: %br
41: .form-actions
42: = f.submit(t('accept'), class: 'btn btn-large btn-primary')
如果我重新加载页面,这次将部署表单。我想这是因为第一次,因为图片存在,然后立即remove_picture
调用并删除图片,当我重新加载表单时,由于图片已经不存在,所以显示了表单。
显然,我错误地理解了 input_field 的用法。