我在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> </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 %>
它进入验证,但验证失败时未显示错误。
答案 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