如何为主持人制作单独的表格?

How to make separate form for a moderator?

假设,我在 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

如果您有用户模型,请为管理员创建一个列并将默认值设置为 false。然后您可以控制为

显示表单的哪些部分
@user vs @user.admin 

或者你可以指定只有@user.admin可以批准图片或者只有@user.admin可以删除主题或者只有@user.admin可以投票up/down等

您可以只检查角色(对不起,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 建议

在后端检查版主权限

最有效的方法是使用以下方法:

= 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