论坛首页 Ruby版 rails

为什么validates_presence_of的错误消息不提示呢?

浏览 426 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-05-12
Web敏捷开发第10章的例子...怎么验证不提示错误呢?
有一个模型
class Order < ActiveRecord::Base
  has_many :line_items
  
  validates_presence_of :name
  validates_presence_of :address
  validates_presence_of :email
  validates_presence_of :pay_type
  
  PAYMENT_TYPES =[
    ["Check","check"],
    ["Credit card","cc"],
    ["Purchase order","po"]
  ]
  
  def add_line_items_from_cart cart
    cart.items.each do |item|
      li = LineItem.from_cart_item(item)
      line_items << li
    end
  end
  
end



有一个控制器
  #准备结账
  def checkout
    @cart = find_cart
    if @cart.items.empty?
      redirect_to_index("您没有选择任何商品")
    else
      @roder = Order.new
    end
  end

  #结账
  def save_order
    @cart = find_cart
    @order = Order.new(params[:order])
    @order.add_line_items_from_cart(@cart)
    if @order.save
      session[:cart] = nil
      redirect_to_index("订单提交成功!")
    else
      redirect_to :action => :checkout
    end
  end


有一个rhtml
<% form_for :order , :url => {:action => :save_order} do |form| %>
    <p>
      <label for="order_name">姓名:</label>
      <%= form.text_field :name,:size => 40 %>
    </p>
    <p>
      <label for="order_address">地址:</label>
      <%= form.text_area :address,:rows => 3,:cols => 40 %>
    </p>
    <p>
      <label for="order_email">Email:</label>
      <%= form.text_field :email,:size => 40 %>
    </p>
    <p>
      <label for="order_pay_type">姓名:</label>
      <%= form.select :pay_type,Order::PAYMENT_TYPES,:prompt => "选择结账方式" %>
    </p>
    <%= submit_tag("结账", :class => "submit") %>
  <%end%>


通过checkout创建表单,同时创建的order对象.表单提交以后.各个属性被正确的赋值了,在@order.save执行失败以后正常转回了checkout方法..但是validates_presence_of验证失败的错误却没有提示出来..实在是没发现代码上的问题...麻烦各位帮忙看看吧.
   
时间:2008-05-13
<%= error_messages_for 'order' %>
   
0 请登录后投票
时间:2008-05-13
<div class="depot-form">
<%= error_messages_for 'order' %>
<fieldset>
<legend>请填写详细信息</legend>
<% form_for :order , :url => {:action => :save_order} do |form| %>
<p>
<label for="order_name">姓名:</label>
<%= form.text_field :name,:size => 40 %>
</p>
<p>
<label for="order_address">地址:</label>
<%= form.text_area :address,:rows => 3,:cols => 40 %>
</p>
<p>
<label for="order_email">Email:</label>
<%= form.text_field :email,:size => 40 %>
</p>
<p>
<label for="order_pay_type">姓名:</label>
<%= form.select :pay_type,Order::PAYMENT_TYPES,:prompt => "选择结账方式" %>
</p>
<%= submit_tag("结账", :class => "submit") %>
<%end%>
</fieldset>
</div>

有的~~~~~~~~~~`
   
0 请登录后投票
时间:2008-05-14
出错了以后不要redirect,要直接render,否则携带错误信息的对象就消失了
   
0 请登录后投票
时间:2008-05-14
花花公子 写道
出错了以后不要redirect,要直接render,否则携带错误信息的对象就消失了

正解。如果要显示错误信息的话,应该用render而不是redirect_to。
   
0 请登录后投票
时间:2008-05-16
谢谢解答.问题解决了.确实是redirect的问题..换了render就好了!
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛: