使用form_tag时传递错误消息?

时间:2011-08-14 01:14:57

标签: ruby-on-rails ruby error-handling

如何传递来自模型的错误消息 - >控制器来查看?

= form_tag :controller => "article", :action => "create" do
  / how to retrieve error messages here?
  %p
    = label_tag :article, "Article"
    = text_field_tag :article
  = submit_tag "Submit Article"

我有这个型号:

class Article < ActiveRecord::Base
  attr_accessible :article

  validates         :article,      :presence => true
end

在我的控制器中:

def create
  @article = Article.new(params[:article])

  if ! @article.save
    # how to set errors messages?
  end
end

我正在使用Rails 3.0.9

2 个答案:

答案 0 :(得分:3)

错误消息存储在您的模型中。您可以通过错误方法进行访问,就像您在http://api.rubyonrails.org/classes/ActiveModel/Errors.html中看到的那样。  公开错误消息的简单方法是在视图中包含以下行:

%span= @article.errors[:article].first

但是,我相信你必须改变你的控制器:

def new
  @article = Artile.new
end

def create
  @article = Artile.new params[:article]
  if !@article.save
    render :action => :new
  end
end

在新操作中,您无需尝试保存文章,因为创建操作已经完成了该工作。新操作(基本上)存在于调用新视图并为验证消息提供支持。

答案 1 :(得分:0)

new方法不应保存任何内容。 create方法应该。

def create
  @article = Article.new(params[:article])

  if ! @article.save
    redirect_to root_path, :error => "ops! something went wrong.."
  end
end