-1

我有以下一段 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 中给出了交集,但这似乎也不起作用。

4

2 回答 2

0

这样做`

unless Role::ROLES.include?(roles[:name])`
于 2013-10-30T22:11:47.597 回答
0

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

在您的控制器中:

@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}
于 2013-10-30T22:16:00.810 回答