你能教我如何在Model中为Array设置一个属性吗?
我试过了但是当我使用像push
,each
这样的数组方法时,我收到错误undefined method `push' for nil:NilClass
我的迁移看起来像这样:
class CreateContacts < ActiveRecord::Migration
def change
create_table :contacts do |t|
t.string :name
t.string :email
t.string :email_confirmation
t.integer :city_ids, array: true
t.text :description
t.timestamps
end
end
end
我想将属性city_ids
设置为Array。
答案 0 :(得分:3)
在模型上与数组(或其他可变值)交互时需要注意的一件重要事项。 ActiveRecord目前不会跟踪“破坏性”或“就地改变”。这些包括数组推送和弹出,推进DateTime对象。 实施例
john = User.create(:first_name => 'John', :last_name => 'Doe',
:nicknames => ['Jack', 'Johnny'])
john = User.first
john.nicknames += ['Jackie boy']
# or
john.nicknames = john.nicknames.push('Jackie boy')
# Any time an attribute is set via `=`, ActiveRecord tracks the change
john.save
推荐 - link
答案 1 :(得分:1)
您需要设置默认值。否则,该属性为nil
,直到您为其指定值:
t.integer :city_ids, array: true, default: []
或者,你需要给它一个值,因为你试图使用它:
c = City.find(...)
c.city_ids ||= []
c.city_ids.push(...)