验证错误消息

时间:2009-09-12 00:02:59

标签: ruby-on-rails

我有两个模型,前端和用户以及相应的控制器和视图。

从前端视图中的form_for我在用户控制器中调用create方法,并将新用户保存在数据库中。一切正常。

问题来自验证。 如果模型验证器出现问题,我需要在前端视图上显示错误消息...所以,如果有错误,我需要在redirect_to前端(因为渲染似乎不可能用于不同的控制器)可能会在这里显示错误。

我还没有找到解决方案。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果可以的话,你错了。引用部分渲染有正确的想法。

假设您正在从应用程序的根目录调用您的前端,注册页面全部布置在那里。在具有此视图的控制器方法中,创建用户的实例变量,然后在表单中使用该变量。例如......

def some_method_for_the_root
    @user = User.new
end

然后在你看来

all your code for the view
render :partial => '/users/new'

在该部分内,请将您的form_for @user对象。瞧,你有一个可以在主应用程序上使用的用户对象,然后如果验证失败,最好通过ajax更新,或者将用户引导到页面以明确地向他们显示错误。

这完全取决于我的经验,但这通常是我经常看到的方法。

答案 1 :(得分:0)

如果使用redirect_to,则该特定对象的验证信息将丢失。您可以尝试在闪存或会话中保存对象,在前端控制器中检索它(创建实例变量)并再次验证它,以便error_messages帮助程序可以使用。

OTOH,这种做法似乎有缺陷。为什么不在用户控制器中为新用户创建表单?

答案 2 :(得分:0)

非常简单,本身。使用form_for调用的方法,假设它被称为def create(在用户控制器中)。

def create @user = User.new(params[:user])
 @user.save
 if !@user.errors.empty?
   @failed = true
 end
 respond_to do |format|
   format.js {} # Will render the create.js.rjs file
 end
end

##### create.js.rjs #####

if @failed
 display the errors
else
 do whatever you wish here
end