0

モデルをテンプレートとして使用して、新しいモデルを作成しようとしています。attr_accessibleただし、テンプレート モデルの属性のみを使用したいと考えています。

これが私が今していることです。動作しますが、複雑すぎるようです。

def copy_attrs_and_errors(other)
  self.class.attr_accessible[:default].to_a.each do |attr|
    eval("self.#{attr} = other.#{attr}") unless attr.blank?
  end
end

次のような簡単なことを言えるようになりたいです。

self.attributes = other.whitelist_attributes(:default)

ありがとう。

4

1 に答える 1

1

少しクレイジーですが、モジュールなどで次のようなことができます。

def self.from_accessible_attributes(other)
  values     = other.attributes.values_at(*other.class.accessible_attributes)
  attributes = Hash[other.class.accessible_attributes.zip(values)]
  new(attributes)
end
于 2013-01-28T19:56:22.017 に答える