在 Rails 中创建新对象

Tob*_*ner 3 ruby object ruby-on-rails-3.1

我找不到一个很好的例子,所以请指出正确的方向。

我想从头开始创建一个具有 2 个属性 abbr 和 name 的对象

我正在尝试使用 50 个州和 DC 制作一个对象。由于我没有看到此列表经常更改,因此我认为不需要数据库,也许我错了。

我尝试了以下但没有成功:

new_state = Object.new        
new_state.abbr = state[:abbr]     
new_state.name = state[:name]
Run Code Online (Sandbox Code Playgroud)

我得到 undefined method abbr=' for #<Object:0x00000006763008>

我究竟做错了什么?

mu *_*ort 5

您可以创建一个没有数据库的简单类:

class State
  attr_accessor :abbr, :name
end

new_state = State.new
new_state.abbr = state[:abbr]
new_state.name = state[:name]
Run Code Online (Sandbox Code Playgroud)

您的版本不起作用,因为Object没有abbr=orname=方法,并且不会即时弥补它们。


phi*_*kov 5

Ruby 中的对象与我假设您已经习惯的 JavaScript 中的对象完全不同,因此动态添加属性并不是那么简单。相反,Hash 与 JS 中的关联数组非常相似,您可以将它用于您的目的:

states = Hash.new # or just {}
states[state[:abbr]] = state[:name] # {'MD' => 'Maryland'}
states['AL'] = 'Alaska' # {'MD' => 'Maryland', 'AL' => 'Alaska'}
states.keys # => ['MD', 'AL']
states.values # => ['Maryland', 'Alaska']
states['AL'] # => 'Alaska'
Run Code Online (Sandbox Code Playgroud)

如您所见,Hash 提供了开箱即用的添加、查找和提取功能,因此您甚至不必定义自己的类。完成添加状态后,将内容 .freeze 冻结也是一个好主意。