我想在表单上显示没有属性的消息。 我有两个类,issue_attachment和issue。
没有模型issue_attachment,我有一个方法检查文件是否以exe,.com ..等结尾,如果是,则返回错误消息。
问题是我不希望错误消息完成。但我不能这样做。我尝试了“基础”的每一个变体,没有任何作用。
我做了一些测试并将验证方法放在课堂问题中并使用“:base”并且它可以工作。
但我需要验证方法:suspitious_attachment issue_attachment留在课堂上。
issue.rb
has_many :attachments, class_name: 'IssueAttachment', dependent: :destroy, autosave: true
issue_attachment.rb
validate :suspitious_attachment
private
def suspitious_attachment
if ends_with? '.bat', '.com', '.exe', '.src', '.cmd'
errors.add(:attachment, I18n.t('errors.messages.suspitious_attachment', :value => attachment.path[-4..-1]))
end
end
def ends_with?(*args)
args.each do |arg|
return true if attachment.path.ends_with? arg
end
false
end
end
_form.html.erb
<div class="clearfix">
<%= image_tag 'icons/required.png', :alt => '*' %><%= t('labels.attachments') %>
<div class="input">
<div class="inputs-list">
<%= f.fields_for :attachments do |builder| %>
<%= render 'attachment_fields', :f => builder %>
<% end %>
<%= f.link_to_add t('actions.add_another_attachment'), :attachments, :class => 'icon-attach' %>
</div>
</div>
有人知道错误吗?
我的英语非常糟糕? :PP
答案 0 :(得分:0)
我不确定你的错误是什么,但我认为你的end_with方法有问题。
正如其他问题的答案所示,有一些简单的Ruby方法可以找到扩展名并根据允许的类型列表进行检查。请看这个: Find the extension of a filename in Ruby
我会测试你的suspitious_attachment方法中是否有正确的文件名,然后使用与上面答案中描述的方法类似的方法。
希望这有帮助