控制器红宝石在铁路上的验证表

时间:2018-07-16 17:18:40

标签: ruby-on-rails ruby

为铁轨上的红宝石提供新的工具。我有个问题。是否可以将验证表单放入控制器中。我得知每个验证都是在模型中设置的,而不是在控制器中设置的。

我做了这样简单的表格

<%= form_for :post, url: email_path  do |f| %>
      <dl class="cf">
        <dt class="required">Nama</dt>
        <dd><%= f.text_field(:name,  {:class => 'input_text full'}) %></dd>
      </dl>
      <dl class="cf">
        <dt class="required">nama Perusahaan</dt>
        <dd><%= f.text_field(:company, {:class => 'input_text full'}) %></dd>
      </dl>
      <dl class="cf">
        <dt class="required">nomor telepon</dt>
        <dd><%= f.text_field(:tel, {:class => 'input_text tel'}) %></dd>
      </dl>
      <dl class="cf">
        <dt class="required">alamat email</dt>
        <dd><%= f.text_field(:email, {:class => 'input_text email'}) %></dd>
      </dl>
      <dl class="cf">
        <dt class="">pertanyaan / komentar</dt>
        <dd><%= f.text_area(:commant, {:class => 'textarea'}) %></dd>
      </dl>
      <ul class="form_btn cf">
        <li class="submit"><%= f.submit(t('.ultra_tech_form_title').html_safe) %></li>
      </ul>

      <% end %>

显示器是这个

enter image description here

但是如果必填(*)为空,则会显示为

enter image description here

此表格直接发送电子邮件。所以我需要设置验证。我该如何设置。

2 个答案:

答案 0 :(得分:2)

您没有将验证放入控制器中,而是将验证放入模型中。我建议您阅读this guide。您的代码应如下所示:

post.rb

validates :name, :email, presence: true

此外,如果您使用simple_form gem,则默认情况下,您会在必填字段中获得那些*符号。您需要做的就是将验证规则添加到模型的属性中。

如果要在创建帖子后自动发送电子邮件,建议您阅读this guidethis guide。基本上,您需要注意的是将创建帖子的过程与发送电子邮件的过程分开,因此,我建议您做的是创建一个将在后台发送电子邮件的作业。综上所述,首先您要验证post模型,并在其有效时运行一个后台作业,该作业将发送一封电子邮件。我希望这对您有意义。

答案 1 :(得分:0)

您可以在模型中创建验证,然后在控制器中定义错误的原因,然后在视图中呈现错误。

例如,在您的模型中,执行以下操作:

validates :name, presence: true

在控制器中,将错误消息发送至:

@error = @post.errors.full_message 

在视图中,您可以执行以下操作:

<% if !@error.nil? %> 
  <span> <%= @error. %> </span>
<% end %>