使用短划线保存字符串数组

时间:2011-09-03 12:20:48

标签: ruby-on-rails ruby ruby-on-rails-3

我在我的应用中列出模型,以便管理员可以创建自定义角色:

        <% ActiveRecord::Base.send(:subclasses).each do |model| %>
    <tr>
        <td width=10>
            <label><%= check_box_tag "role[read_models][]", model.name, @role.read_models.include?(model.name) %></label><br />
        </td>
        <td width=10>
            <label><%= check_box_tag "role[write_models][]", model.name, @role.write_models.include?(model.name) %></label><br />
        </td>
        <td><%= model.name %></td>
    </tr>
    <% end -%>

顺便说一下,这很棒。在日志中它正确保存数组:

"read_models"=>["Slug", "Account", "Category", "Document", "Group", "Location", "Role", "Status", "Task", "Ticket"]

但是在输出结果时:

<%= @role.read_models.each do |model| %>
   <%= model %><br />
<% end -%>

我明白了:

--- 
- Slug
- Account
- Category
- Document
- Group
- Location
- Role
- Status
- Task
- Ticket

(包括前面的三个破折号)

我已经尝试过to_a.join(','),但它仍然在每个前面都有破折号。

有关如何更改此流程的任何想法?谢谢!

1 个答案:

答案 0 :(得分:0)

我猜你有一个角色类,这个类是用来存储这些值的类,如果是这种情况,这就是你可以做的:

class Role < ActiveRecord::Base
  serialize :read_models, Array
end

这将使ActiveRecord将您在read_models列中拥有的这些值存储为YAML表示(这是您已经拥有的)但是然后您使 @ role.read_models 您将获得该数组而不是包含YAML表示的字符串。