我有两个不同的注册表单的部分视图。在我的主页上,根据点击的链接,我将呈现相应的表单。(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样式也会改变,闪存也不会显示
答案 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!"