NameError при создании связанного объекта из-за изменения атрибута
Вот что я пытаюсь добиться: у Моих Предметов много действий. Когда статус Предмета изменится, создайте новое Действие. Позже я буду просить пункт для связанных с ним действий. К сожалению, я получаю следующее исключение, когда пытаюсь выполнить действие через изменение статуса: NameError at /create; uninitialized constant Shiny::Models::Item::Action
,
Вот мои модели:
module Models
class Item < Base
has_many :actions
def status=(str)
@status = str
actions.create do |a|
a.datetime = Time.now
a.action = str
end
end
end
class Actions < Base
belongs_to :item
end
class BasicFields < V 1.0
def self.up
create_table Item.table_name do |t|
t.string :barcode
t.string :model
t.string :status
end
create_table Actions.table_name do |t|
t.datetime :datetime
t.string :action
end
end
end
end
Затем в контроллере:
class Create
def get
i = Item.create
i.barcode = @input['barcode']
i.model = @input['model']
i.status = @input['status']
i.save
render :done
end
end
1 ответ
Пока не будет представлен лучший ответ, объясняющий, где Item::Action
пришел, вот как я это исправил:
module Models
class Item < Base
has_many :actions
def status=(str)
# Instance variables are not propagated to the database.
#@status = str
write_attribute :status, str
self.actions.create do |a|
a.datetime = Time.now
a.action = str
end
end
end
# Action should be singular.
#class Actions < Base
class Action < Base
belongs_to :item
end
class BasicFields < V 1.0
def self.up
create_table Item.table_name do |t|
t.string :barcode
t.string :model
t.string :status
end
create_table Action.table_name do |t|
# You have to explicitly declare the `*_id` column.
t.integer :item_id
t.datetime :datetime
t.string :action
end
end
end
end
Очевидно, я нуб AR.