4

私はユーザーロールを格納するためにmongoidの配列を使用しており、ほとんどの場合正常に機能しますが、レールが配列に空白を渡し、mongoidがそれを保存するという問題があります。

["", "admin", "editor", "author"] 

Formtasticは、別の問題を回避するためにこれを自動的に実行します。しかし、問題は、mongoidが配列の空白を保存することです。空白を無視するように指示するにはどうすればよいですか?

<input id="user_roles_none" name="user[roles][]" type="hidden" value="" />

コード:

  field :roles, :type => Array, :default => ["author"]

  ##USER ROLES

  ROLES = %w[admin editor author]

  class << self
    def with_role(*args)
      any_in(:roles => args)
    end
  end

before_saveでコールバックを作成し、nilsを削除できると確信していますが、見落としている別の方法は確かにありますか?

4

1 に答える 1

4

ロールライターメソッドをオーバーライドして、コンパクトにすることができます。

def roles=(values)
  write_attribute(:roles, values.map{|v| v.blank? ? nil : v}.compact)
end

[編集]:Mik_Dieによるコメントで説明するように。あなたは次のようにすることができます:

def roles=(values)
  write_attribute(:roles, values.reject(&:blank?)
end
于 2012-04-04T11:51:22.263 に答える