2011-01-13 75 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。