Rails:有没有一种有效的方法来获取所有列入值的列入白名单的属性?

时间:2013-01-28 17:03:05

标签: ruby-on-rails-3 activerecord mass-assignment

我正在尝试使用模型作为模板来创建新模型。但是,我只想使用模板模型中的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)

感谢。

1 个答案:

答案 0 :(得分: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