rails - 公共方法抽取1

发表于:,更新于:,By Sally
大纲
  1. 1. 场景

场景

  • 我们的后台管理的人员有员工,客户等,每个用户都有启用(可以使用该后台系统)和禁用 ( 不可以使用后台了)功能

  • 启用和禁用点击事件,通过修改is_enable(设置true|false)来处理

  • 后台的逻辑

1
2
3
4
5
6
7
#切换禁用/启用状态
def switch_state
// 拿到对象类名,获得类对象,执行类的一系列方法

entity = params[:class_name].classify.constantize.find_by_id params[:id]
entity.update_attribute :is_enabled, !entity.is_enabled
redirect_to :back,:notice => "操作成功"
end
  • 前台调用 : 按钮点击事件完成(按钮的显示效果太迷惑了)
1
2
3
4
5
6
<% if householder.is_enabled == true%>
// 注意 :class_name => "Householder"
<%= link_to '启用', switch_state_commons_path(:id => householder.id, :class_name => 'Householder'), :method => :put, data: { confirm: '确定要禁用吗' } , :class=>"btn btn-su
<% else %>
<%= link_to '禁用', switch_state_commons_path(:id => householder.id,:class_name => 'Householder'),:method => :put, data: { confirm: '确定要启用吗' },:class=>"btn
btn-dan

<% end %>
  • 使用下拉框实现,利用ajax,因为前端页面包含该逻辑的比较多,所以将方法写在application.html.erb文件中
1
2
// 假设 householder
<%= select_tag '', options_for_select([['启用', true], ['禁用', false]], householder.is_enabled), :entity_id => householder.id, :entity => 'Householder', :class => 'switcher' %>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$('.switcher').change(function() {
the_id = $(this).attr('entity_id');
the_class = $(this).attr('entity_class');
url = '/common/switch_state?id=' + the_id + '&class_name=' + the_class;

if(confirm('确定吗?')) {
$.ajax({
url: url,
type: 'PUT',
success: function() {
console.info('success');
}
});
}
});