【问题标题】:Validation error messages验证错误消息
【发布时间】:2009-09-12 00:02:59
【问题描述】:

我有两个模型,前端和用户,具有各自的控制器和视图。

从前端视图中的form_for,我在用户控制器中调用创建方法,并将新用户保存在数据库中。所有作品。

问题在于验证。 如果模型验证器有问题,我需要在前端视图上显示错误消息......所以,如果有错误,我需要在 redirect_to 前端时(因为不同控制器似乎无法渲染)是可能的在此处显示错误。

我还没有找到解决方案。

谢谢!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

    def some_method_for_the_root
        @user = User.new
    end
    

    那么在你看来

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

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

    这只是根据我的经验,但它通常是我最常看到的方法。

    【讨论】:

    • 是的,我用部分解决了。现在我需要找到一种方法来通过 ajax 处理验证错误。在纯粹的“rails 生活方式”中:)。谢谢!!
    • 好的,我已经尝试两次添加一个很好的评论回复,它讨厌我。因此,请参阅下面的其他答案。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,这似乎有点太麻烦了;)。我没有在用户控制器中创建表单,因为在我的一个前端视图中,我需要一个用于用户注册的小表单。如果我的方法不对,我会听!
    • 将该表单的 HTML/ruby 代码放在一个部分中 - 您可以随时通过简单地调用 render => "viewname/partial" 从不属于当前控制器的视图呈现部分。
    • 然而,这种方式只渲染部分,前端视图不显示!
    • 好吧,也许我找到了。我为我使用的其他部分明确指出了“视图名称”,因为它会将控制权传递给用户(不幸的是)。现在让这一切正常工作,我可怜的前端视图仅由一个渲染组成:partial => "blabla",其他的东西都在局部内完成..但它有效!谢谢!
    【解决方案3】:

    本身就很简单。使用您的 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
    

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 2018-12-10
      • 1970-01-01
      • 2016-03-30
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多