Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从可选信息创建新的类属性,而不指定名称_Ruby On Rails_Ruby_Class_Methods - Fatal编程技术网

Ruby on rails 从可选信息创建新的类属性,而不指定名称

Ruby on rails 从可选信息创建新的类属性,而不指定名称,ruby-on-rails,ruby,class,methods,Ruby On Rails,Ruby,Class,Methods,我有一门课是这样的: class Item attr_accessor :item_id, :name, :address, :description, :facilities, :ratings, :directions, :geo, :images, :video, :availability def self.create options={} item = Item.new item.item_id = options[:item_id] item.na

我有一门课是这样的:

class Item
  attr_accessor :item_id, :name, :address, :description, :facilities, :ratings, :directions, :geo, :images, :video, :availability

  def self.create options={}
    item = Item.new
    item.item_id = options[:item_id]
    item.name = options[:name]
    item.description = options[:desc]
    item.ratings = options[:rating]
    return item
  end

end
如何使“create”方法能够读取正在传递的给定选项并尝试创建它们,而不必显式指定它们的名称

ie.no item.name=选项[:item_id]等。。。。只是计算机大脑会想:“啊……我看到选项‘option[:name],让我尝试创建一个具有相同名称和此值的属性!…”

如果你特别喜欢冒险:

class Object
  def metaclass; class << self; self; end; end
end

class Item
  def initialize(options = {})
    options.each {
      |k,v|
      self.metaclass.send(:attr_accessor, k)
      self.send( "#{k.to_s}=".intern, v)
    }
  end
end

i = Item.new(:a => 1, :c => "dog")
puts i.a
# 1
puts i.c
# dog

i2 = Item.new
puts i2.a
# ERROR
类对象
def元类;第1类:c=>“狗”)
把i.a
# 1
把i.c
#狗
i2=项。新
把i2.a
#错误
如果你特别喜欢冒险:

class Object
  def metaclass; class << self; self; end; end
end

class Item
  def initialize(options = {})
    options.each {
      |k,v|
      self.metaclass.send(:attr_accessor, k)
      self.send( "#{k.to_s}=".intern, v)
    }
  end
end

i = Item.new(:a => 1, :c => "dog")
puts i.a
# 1
puts i.c
# dog

i2 = Item.new
puts i2.a
# ERROR
类对象
def元类;第1类:c=>“狗”)
把i.a
# 1
把i.c
#狗
i2=项。新
把i2.a
#错误