假设我在edit.slim模板中有一个简单的表单。如下所示
= simple_form_for article, method: :put do |f|
= f.input :title
= f.input :body
= f.button :submit
但是,如果我希望它与另一个角色不同呢? 例如,如何为成员提供一个表单,为主持人提供扩展表单?
主持人应该再增加一个inpur字段= f.input :status, as: :select
答案 0 :(得分:2)
你可以检查角色(对不起Erb而不是Slim):
<% if current_user.is_moderator? %>
<%= simple_form_for ... %>
<!-- moderator form content -->
<% else %>
<%= simple_form_for ... %>
<!-- common form content -->
<% end %>
或者如果普通用户和版主可以使用相同的表单:
<%= simple_form_for ... %>
<!-- common form content -->
<% if current_user.is_moderator? %>
<!-- moderator form content -->
<% end %>
<% end %>
如果主持人的表单包含必填字段,请使用第一个变体或添加f.hidden_field
:
<% if current_user.is_moderator? %>
<%= f.input :status, as: :select %>
<% else %>
<%= f.hidden_field :status, value: some_default_value %>
<% end %>
<强>更新强> 不要忘记在后端检查主持人权限Rich Peck建议
答案 1 :(得分:2)
最有效的方法是使用以下内容:
= simple_form_for article, method: :put do |f|
= f.input :title
= f.input :body
- if current_user.moderator?
= f.input :moderator_input
= f.button :submit
这需要在控制器中备份并进行适当的检查:
#app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
def create
params = current_user.moderator? ? "moderator_params" : "user_params"
@article = Article.new eval(params)
end
private
def user_params
params.require(:article).permit(:x, :y)
end
def moderator_params
params.require(:article).permit(:x, :y, :z)
end
end
答案 2 :(得分:1)
如果您有用户模型,请为admin创建一个列,并将默认值设置为false。然后,您可以控制表单的哪些部分显示
@user vs @user.admin
或者您可以指定只有@ user.admin可以批准图像,或者只有@ user.admin可以删除主题,或者只有@ user.admin可以向上/向下投票等