如何为主持人制作单独的表格?
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
假设,我在 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