如何告诉Rails允许列具有数组而不是字符串

时间:2014-04-06 06:18:29

标签: ruby-on-rails

在迁移中我做了:

add_column :users, :roles, :string, default: "member"

但我希望它能返回一个数组。举个例子,我可以运行这段代码:

def user_role_rules
  return [] if @user.roles.nil?
  @user.roles.each do |role|
    exec_role_rules(role) if @user.roles.include?(role)
  end
end

由于不了解@user和其他方法,我们假设如果@user.roles返回# => ["member"],则会运行此代码,但它会返回# => "member"。这会导致每个错误消息:undefined method 'each' for "member":String。有没有办法让@user.roles返回数组而不是字符串?

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找这样的东西:

add_column :users, :roles, :string, array: true

答案 1 :(得分:1)

首先,您必须将列迁移到文本列而不是字符串列。

然后在模型中提出:

serialize :roles, Array