【问题标题】:Pass Error Messages When Using form_tag?使用 form_tag 时传递错误消息?
【发布时间】:2011-08-14 01:14:57
【问题描述】:

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

= 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

【问题讨论】:

  • 你见过这个吗?我相信它回答了您的问题:railsforum.com/viewtopic.php?id=30889 另外,您为什么要使用 form_tag 使用 form_for 在这种情况下应该会更好地工作,对吧?
  • 我的计划实际上是使用另一个控制器。
  • “使用另一个控制器”是什么意思?请提供您正在尝试做的更多细节。
  • 我认为他的意思是他想使用一个接受嵌套资源参数的控制器?无论如何,使用form_for 甚至可以像这样以通用方式使用:form_for :articleapi.rubyonrails.org/classes/ActionView/Helpers/…

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


【解决方案1】:

错误消息存储在您的模型中。您可以通过错误方法访问,就像您在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

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

【讨论】:

    【解决方案2】:

    new方法不应该保存任何东西。 create 方法应该。

    def create
      @article = Article.new(params[:article])
    
      if ! @article.save
        redirect_to root_path, :error => "ops! something went wrong.."
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多