如何仅在Rails的collection_select中显示所选信息?

时间:2019-03-29 04:19:06

标签: ruby-on-rails

我在下面有以下代码:

Z0700  Z or ±hhmm
Z07:00 Z or ±hh:mm
Z07    Z or ±hh

在我的EmpRole中,有所有者,经理,班主任和销售员工。我正在创建一个自我注册表格,该表格允许员工注册自己以使用该应用程序。

当前,使用此方法签约的任何人都可以是所有者和经理,但是,我希望签约的任何人仅具有Shift Leader和Sales Employee角色的特权。无论如何,我可以使用collection_select过滤掉其他2个选项,只显示“ Sales Employee”和“ Shift Leader”吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试

<div class="field">
  <%= f.label :emp_role_id, "Employee Role" %>
  <%= f.collection_select :emp_role_id, EmpRole.where("emp_rolename IN (?)", ["Sales Employee", "Shift Leader"]), :id, :emp_rolename %>
</div>

答案 1 :(得分:1)

两个解决方案......

第一个解决方案

##############in emp model..emp.rb####################


ADMIN_ROLES = %w[SUPERADMIN ADMIN BIGADMIN].freeze
SIMPLE_ROLES = %w[SHIFTLEADER SALESLEADER BLAH BLAH].freeze

scope :get_simple_roles_only, -> { where(:name => SIMPLE_ROLES) }


##############in the view file ###################
  <%= f.collection_select :emp_role_id, EmpRole.get_simple_roles_only.collect {|x| [x.name, x.id]} || f.rolename) %>

第二解决方案>使用delete_if

 <%= f.collection_select :emp_role_id, EmpRole.all.delete_if {|a| a.emp_rolename  == ['ROLENAME1', 'ROLENAME1'].map{|s| [s.id, s.name]} %>

我会推荐第一个,因为它非常动态,可以根据需要进行更改。

希望有帮助