我有以下simple_form_for
使用 MailForm 发送电子邮件(不会在数据库中存储任何内容)
<div class="small-10 small-offset-1 medium-6 medium-offset-3 large-6 large-offset-3 columns">
<%= simple_form_for @contact, :html => {:class => 'form-horizontal'} do |f| %>
<%= f.label :Nombre %>
<%= f.text_field :name, :required => true, :value => 'Administrador', :readonly => true %>
<%= f.label :Correo_electrónico %>
<%= f.email_field :email, :required => true, :value => @pass_email, :readonly => true %>
<%= f.label :Mensaje %>
<%= f.text_area :message, :as => :text, :required => true, cols: 20, rows: 10 %>
<div class="hidden">
<%= f.input :nickname, :hint => 'Leave this field blank!' %>
</div>
</br>
<%= f.button :submit, 'Enviar', :class => "button [radius round]" %>
<% end %>
<%= button_to 'Volver', manager_admin_menu_path, :method => :get, :class => 'button success [radius round]' %>
</div>
正如您所看到的,text_area
有一个required => true
但是当我测试表单时,它允许在text_area中提交空文本
如何使用rails / ruby验证text_area中是否输入了任何文本(基本上将text_area作为必填字段,我知道我可以用javascript做这个但是想学习正确的Ruby / Rails方式)< / p>
更新
我的模型继承自MailForm
,并且定义如下
class Contact < MailForm::Base
attribute :name, :validate => true
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, :captcha => true
end
我还想了解为什么必需选项的行为不符合预期
texarea正在像这样呈现
<textarea cols="20" id="contact_message" name="contact[message]" required="required" rows="10">
</textarea>
显然没有空格但有换行符,这会影响吗?
答案 0 :(得分:3)
这是Rails中验证的概念。验证意味着在将字段保存到数据库之前确保字段满足某些要求,您可以验证presence
,如果字段不为空,则只提交表单,您可以验证uniqueness
如果字段是唯一的(数据库中已不存在),则仅提交表单,依此类推。
因此,为了您的关注,您有一个Contact模型,您应该在contact.rb文件中添加:
class Contact < ActiveRecord::Base
validates :message, presence: true // add this line
end
现在当您提交带有空消息字段的表单时,它会抱怨并给您一个错误。
请在此处阅读http://guides.rubyonrails.org/active_record_validations.html
的更多内容