如何在HAML中获取数组之间的不常见元素

时间:2013-10-30 22:02:00

标签: ruby-on-rails haml

我有以下HAML代码:

  %li  
  %label 
    #{t('Registrations.new.CheckBoxHeader')}
    %abbr.required{title: t('Registrations.new.Required')} *
- if !current_user.roles.blank? 
 - current_user.roles.each do |roles|
   - (roles[:name] & Role::ROLES).each do |role| 
   %input#roles{name: "access[]", type: "checkbox",value:"#{role}"}/
   %label{for: "roles"} #{role}
- else
 - Role::ROLES.each do |role| 
   %input#roles{name: "access[]", type: "checkbox",value:"#{role}"}/
   %label{for: "roles"} #{role} 

我希望仅显示roles[:name]Role::ROLES之间不常见的复选框中的那些角色。

我知道我在做错事。我知道Ruby中的&给出了交集,但这似乎也没有用。

2 个答案:

答案 0 :(得分:0)

做这个`

unless Role::ROLES.include?(roles[:name])`

答案 1 :(得分:0)

首先,让我们从您的视图中获取所有逻辑和数据耦合。此外,您需要union运算符,而不是交集运算符。

在您的控制器中:

@roles = current_user.roles.pluck(:name) | Role::ROLES

这会让你的观点更加清晰:

   %li  
     %label 
       #{t('Registrations.new.CheckBoxHeader')}
       %abbr.required{title: t('Registrations.new.Required')} *
 - @roles.each do |role|
   %input#roles{name: "access[]", type: "checkbox",value:"#{role}"}/
   %label{for: "roles"} #{role}