我试图在父属性更新后立即更新关联的表属性。因此,菜单表是主表,并且无论何时更新主表,都需要更新子表(例如,active_status)中的关联属性。为了做到这一点,我在菜单模型中添加了'after_update'回调。但是,我得到了以下错误。我在这里做错了什么?Rails:当父属性更新时,如何自动更新关联的表属性
错误
NoMethodError在MenusController#更新未定义的方法`menu_states为零 :NilClass
提取的源(围绕线#54):52 53 54 55 56 57
DEF update_menu_states_for_menu @ menu.menu_states do | menu_state | self.menu_states.update_attributes(menu_id:menu_state.id,价格:menu_state.price,active_status:menu_state.active_status) 端端
menu.rb
class Menu < ActiveRecord::Base
after_update :update_menu_states_for_menu
def update_menu_states_for_menu
menu.menu_states do |menu_state|
self.menu_states.update_attributes!(menu_id: menu_state.id, price: menu_state.price, active_status: menu_state.active_status)
end
end
模型
class MenuState < ActiveRecord::Base
belongs_to :menu
end
class Menu < ActiveRecord::Base
has_many :menu_states
end
表格
local_menus
t.integer "restaurant_id", limit: 4
t.integer "menu_id", limit: 4
t.boolean "active_status", limit: 1
t.boolean "instock_status", limit: 1
t.integer "price", limit: 4
t.integer "selling_price", limit:4
menus
t.integer "restaurant_id", limit: 4
t.string "name", limit: 255
t.integer "price", limit: 4
t.integer "brand_id", limit: 4
t.integer "category_id", limit: 4
t.text "description", limit: 65535
t.boolean "active_status", limit: 1
t.date "start_date"
t.date "end_date"
谢谢,但它并没有菜单表的更改保存到menu_states表尽管错误消失。我期待在菜单更新操作后立即触发以下SQL语句:“UPDATE'menu_states' SET'price' = xxx,'active_status' = x WHERE'menus'.'id' = xx” – Kaku