提问人:Ecnalyr 提问时间:2/8/2014 更新时间:2/9/2014 访问量:239
我有用于在表单中设置隐藏值的 javascript,如何显示相关隐藏属性的错误消息?
I have javascript I use to set a hidden value in a form, how do I show an error message for the associated hidden attribute?
问:
我有一个视图,顶部有一个 div,显示图像列表,然后在底部显示一个表单:
%div{ id: 'how-soon' }
%ul
- %w( now week month browsing ).each do |hs|
%li{ class: 'inactive', id: hs }=image_tag "how-soon/#{hs}.jpg"
= simple_form_for @employer_signup, :url => url_for(:action => 'create', :controller => 'home'), method: :post do |f|
= f.error_notification
.form-inputs
= f.hidden_field :how_soon
.form-actions
= f.button :submit, 'Join Now'
当用户单击 div 中的一个图像时,此 coffeescript 会在以下表单中设置一个隐藏值:#how-soon
$("#how-soon > ul > li").click ->
$(this).siblings('.active').toggleClass('inactive active')
$(this).toggleClass('inactive active')
$('#employer_signup_how_soon').val($(this).attr('id'))
在表单中调整的属性由其父模型验证其存在性,:how_soon
validates :how_soon, presence: true
如果提交表单时没有表单的值,则会重新显示该表单,并且我看不到特定错误,因为该字段已隐藏。:how_soon
value missing
一个典型的解决方案似乎是将错误放入另一个属性的错误中并在那里显示它们,但我没有显示此模型中可见的其他属性,因此我无法以这种方式显示错误。我会用这样的东西来做到这一点:
after_validation :validate_how_soon
protected
def validate_how_soon
if errors[:how_soon].present?
errors[:how_soon].each { |message| errors.add :first_name, message }
end
end
奖励内容(可能不需要解决我的问题):
虽然我简化了上面的代码,但我实际上是使用一个表单对象来呈现表单,该表单对象最终用于创建两个对象,a 和 a(想想工作列表)。与相关的属性都是用户点击他们想要的图片并通过jquery在表单中设置相应值时填写的隐藏值。这些属性都存在。以下是可能与我的问题相关的奇怪部分:User
Listing
Listing
User
当我只有可见属性(碰巧都是属性)有错误时,错误会相应地显示在它们的属性上。但是,如果我在可见属性上有错误,在隐藏属性上有错误,则根本不显示可见属性的任何错误,我只会在表单顶部收到通用通知。User
Please review the problems below:
就像我说的,这个“奖励内容”实际上可能没有帮助解决这个问题,但我想无论如何我都会把它留在这里。
答:
通过向你的 Rails 后端提交表单,无论它是否隐藏,如果你没有填写正确的数据,验证仍然会返回错误
您可以像处理“普通”字段一样处理隐藏字段:
validates :how_soon, presence: true
这不会带回您需要的错误吗?
您必须在表单中包含以下内容:
<% if resource.errors.full_messages.present? %>
<!-- Errors -->
<ul>
<% resource.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
如果您让我们知道错误哈希的响应,我们将能够更好地直接帮助解决 iissue!
评论