我有一个Rails应用程序,我对表单进行了show
操作。此show
操作使用一个视图来检查if user_type == "admin"
并相应地显示部分。对于此show
视图,只有if user_type = admin
可以访问它。
提交表单后,它会在同一个控制器(store
)中触发另一个操作。我遇到的问题是,当提交时出现错误时,store
会在不引用用户的情况下呈现show
,因此部分不会出现,因为user_type不等于admin(因为它找不到用户)。但是,由于访问'show'受到保护,我想知道是否有办法检查网址。
实施例: 表格是:
http://foo.com/bars/4/users/3
但是,当它失败时,渲染网址变为:
http://foo.com/bars/4/users/store
show.html.erb视图包含:
<%= form_for([:bar,@user], :url => store_bar_users_path(params[:bar_id]), :html => {:name=>"users_form",:multipart => true,:class=> "standardForm"}) do |user| %>
<%= render :partial => "users/admin_options" if @user.user_type == "admin" %>
在控制器的store
操作中:
if !@user.save
render :action => "show" ,:layout => 'application'
else
所以我想知道的是我是否可以改变条件:
<%= render :partial => "users/admin_options" if @user.user_type == "admin" %>
以某种方式也检查store_bar_users_path
的网址,或类似的网址 - 或者store
操作中的渲染可能不正确。
答案 0 :(得分:1)
将用户类型存储在会话变量中,在用户登录时设置。然后您不必继续加载它,并且所有控制器,视图和帮助程序都可以看到它。使用此变量确定是否要显示部分。