0

私は Rails 2 で作業しています。2 つのモデルのデータを含むフォームがあります。1 つのモデルでは、フィールドを検証して を使用してエラーを入力して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 %>

検証に入りますが、検証が失敗してもエラーは表示されません。

4

3 に答える 3

0

これでは、 を使用してフォームを生成してform_tagおり、予想されるエラーはフォーム ビルダーに保存されますform_for

form_tag使用する代わりにform_for(@punching_request)。これでうまくいくはずです。

于 2012-11-05T07:43:51.933 に答える
0

IRB コンソールを試しましたか? そうでない場合は、何かが含まれていることを確認するために、そこで何が起こっているかを見てください@punching_request.errors

于 2012-11-05T07:30:25.203 に答える
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
于 2012-11-05T07:49:50.687 に答える