Tri*_*rip 1 ruby-on-rails attr-accessor
我似乎无法解决这个问题.
我想在没有数据库的情况下完成此任务:
Object.new(:attribute_1 => "foobar", :attribute_2 => "foobar")
Run Code Online (Sandbox Code Playgroud)
那回报:
ArgumentError: wrong number of arguments (1 for 0)
from (irb):5:in `initialize'
from (irb):5:in `new'
from (irb):5
Run Code Online (Sandbox Code Playgroud)
我的模特:
class Object
extend ActiveModel::Naming
include ActiveModel::Conversion
def persisted?
false
end
attr_accessor :attribute_1, :attribute_2
Run Code Online (Sandbox Code Playgroud)
我假设你并没有真正使用Object你的班级名称.如果是这种情况,您只需添加逻辑以在构造函数中设置属性:
class Foo
attr_accessor :bar, :baz
def initialize(attrs = {})
attrs.each { |attr,val| instance_variable_set "@#{attr}", val }
end
end
p Foo.new
p Foo.new(:bar => "abc", :baz => 123)
Run Code Online (Sandbox Code Playgroud)
输出:
#<Foo:0x2ac3d3a890a0>
#<Foo:0x2ac3d3a88e20 @baz=123, @bar="abc">
Run Code Online (Sandbox Code Playgroud)
请注意,在现实生活中,您需要检查构造函数中传递的属性列表,以确保它们是您的类的有效属性.