2011-01-13 80 views
1

我無法修改RoR中的現有關係。 DB模式是用戶(ID),圖書(ID,標題),評級(USER_ID,book_id,評級) 模型是在Rails中保存相關實體

class User < ActiveRecord::Base 
    has_many :ratings 
end 

class Rating < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :book 
end 

class Book < ActiveRecord::Base 
    has_many :ratings 
end 

創建新的評級,book.ratings.build(:USER_ID => 1, :rating => 5); book.save工作正常,但我不能修改現有評級,

r = book.ratings.where(:user_id => 1).first 
r.rating = 5 

book.save不保存相應的等級和r.save提出了有關列rating.id錯誤。有沒有辦法讓事情沒有修改數據庫架構的工作?

+0

我認爲,在'books_controller'內,在更新操作中,您必須遍歷每個'Rating':'@book.ratings.each do {| r |例如,r.attributes = params [:rating] [r.id.to_s]}。你想從控制檯或方法中做到這一點? – Zkoh 2011-01-13 15:35:29

+0

`book.ratings.where(:user_id => 1).to_sql`和`r.inspect`的輸出(在控制檯中)是什麼? – 2011-01-13 15:42:31

回答

0

你得到錯誤的原因是因爲你的評分表有數據但沒有ID列。

將id列添加到您的評分表中並保存您的更改並調用rating.save。