我試圖在父屬性更新後立即更新關聯的表屬性。因此,菜單表是主表,並且無論何時更新主表,都需要更新子表(例如,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