在验证检查后呈现控制器中的部分

时间:2015-06-22 23:36:05

标签: ruby-on-rails ruby-on-rails-4 model-view-controller

我有两个不同的注册表单的部分视图。在我的主页上,根据点击的链接,我将呈现相应的表单。(views / application / index)

= link_to 'Mentor', new_user_path(user_role: true), :class =>'btn'
= link_to 'Mentee', new_user_path, :class =>'btn'

在views / users / new.html.haml中,我检查用户角色并重定向到相应的表单。

- if params[:user_role]
= render 'mentor'
- else
= render 'mentee'

在用户模型中,我添加了这样的验证。

class User < ActiveRecord::Base
    email_regex = /\A[\w+\-.]+@cisco.com/i

    validates :cisco_email, :presence   => true,
              :format     => { :with => email_regex,}
    validates :work_city, :presence => true

end

因此,当有任何无效字段时,我想用flash消息指向同一个表单。我的控制器看起来像这样。

class UsersController < ApplicationController

   def index
   end

    def show
      @user = User.find(params[:id])
    end

   def new
     @user = User.new
    end

    def create
        @user = User.new(params[:user])    # Not the final implementation!
        if @user.save
            flash[:success] = "Welcome to the CSG Mentoring Tool!"
            redirect_to @user
        else 
        flash[:notice] = "Error regsitering."

             if params[:user][:user_role]
                      render :partial => 'users/mentor'
             else
                render :partial => 'users/mentee'
             end
         end
     end    
 end

当存在无效的字段条目时,它将重定向到&#39;受指导者&#39;页面无论在哪个页面上发生错误。整个css样式也会改变,闪存也不会显示

1 个答案:

答案 0 :(得分:1)

为什么这不起作用?      如果params [:user] [:user_role]         渲染:部分=&gt; &#39;用户/导师&#39;      其他         渲染:部分=&gt; &#39;用户/受指导者&#39;      端

params[:user][:user_role]是零。

你可以用很多方法检查它:

高于if条件raise params[:user].inspect

为什么没有?

原因是你传递new_user_path(user_role: true) user_role为true,但是user_role在导师形式中不是真的。

params[:user_role]不会以导师形式设置user_role = true字段。

设置user_role

<%=f.hidden_field :user_role, value: params[:user_role] %>

如果它对导师来说应该是真的那么

<%=f.hidden_field :user_role, value: true %>

默认情况下,flash会使它们可用于下一个请求,但有时您可能希望在同一请求中访问这些值。 Reference

这适用于重定向

flash[:success] = "Welcome to the CSG Mentoring Tool!"

这适用于渲染

flash.now[:success] = "Welcome to the CSG Mentoring Tool!"