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

时间:2016-01-28 04:35:07

标签: ruby-on-rails ruby-on-rails-4 simple-form

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

3 个答案:

答案 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可以向上/向下投票等