Rails没有在表单提交上显示错误

时间:2012-11-05 07:16:42

标签: ruby-on-rails ruby

我在rails 2中工作,我有一个包含两个模型数据的表单,在一个模型中我使用self.errors.add_to_base验证字段并输入错误,但这不会在表单上显示错误并成功提交该请求

这是我的模型验证\

validate :checkPunchingEntries

  def checkPunchingEntries
    if self.punch_in_time.blank? && self.punch_out_time.blank?
      self.errors.add_to_base("Both 'Punch in' and 'Punch out' time can not be blank")
    end
  end

这是我的表格

<% form_tag '/punching_requests/create', :method => :post, :class=>"punching_request_form" do %>
    <% @punching_request.errors.full_messages.each do |msg| %>
        <p class="error"><%=msg%></p>
    <% end %>

    <p>
      <label>Date </label>
      <%= text_field_tag 'date'%>  <%= calendar_for("date") %>
    </p>

    <p>
      <label>&nbsp;</label>
      <input type="checkbox" onclick="punch_in_toggle()">Punch In</input>
      <input type="checkbox" onclick="punch_out_toggle()">Punch Out</input>
    </p>

    <div id="punch_in">
      <p>
        <label>Punch In Time </label>
        <%= text_field_tag 'punch_in_time'%>
      </p>
    </div>

    <div id="punch_out">
      <p>
        <label>Punch Out Time </label>
        <%= text_field_tag 'punch_out_time'%>
      </p>
    </div>

    <p>
      <label>Assign To</label>
      <%= select_tag(:approved_by,  options_from_collection_for_select(@human_resource_persons, "id", "login")) %>
    </p>

    <p>
      <label>Reason </label>
      <%=text_area_tag 'reason'%>
    </p>

    <p class="actions"><label></label><%= submit_tag 'Save' %></p>

<% end %>

它进入验证,但验证失败时未显示错误。

3 个答案:

答案 0 :(得分:0)

您是否尝试过IRB控制台?如果没有,请查看那里发生了什么,只是为了确保@punching_request.errors包含某些内容。

答案 1 :(得分:0)

在此,您使用form_tag生成表单,并且您期望的错误将存储在表单构建器form_for中。

而不是form_tag使用form_for(@punching_request)。这应该可以解决问题。

答案 2 :(得分:0)

试试这个

def checkPunchingEntries
  if self.punch_in_time.blank? && self.punch_out_time.blank?
    errors[:base]<< "Both 'Punch in' and 'Punch out' time can not be blank"
  end
end

并使用form_for@punching_request

例如

# in your controller
def new
  @punching_request = PunchingRequest.new
end
def create
  ...
  ...
end

您的表单在new.html.erb

form_for(@punching_request)
  ...
  ...
end