Ruby on rails 在Rails中保存相关实体

Ruby on rails 在Rails中保存相关实体,ruby-on-rails,Ruby On Rails,我无法修改RoR中的现有关系。 数据库模式是usersid、booksid、title、ratingsuser\u id、book\u id、rating 模型是 class User < ActiveRecord::Base has_many :ratings end class Rating < ActiveRecord::Base belongs_to :user belongs_to :book end class Book < ActiveRecord

我无法修改RoR中的现有关系。 数据库模式是usersid、booksid、title、ratingsuser\u id、book\u id、rating 模型是

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.save不会保存相应的评级,r.save会引发有关列rating.id的错误。有没有一种方法可以在不修改db模式的情况下工作?

出现错误的原因是评级表中有数据,但没有和id列


将和id列添加到您的ratings表中,并保存更改调用rating.save。

我认为在“books_controller”中,在更新操作中,您必须循环查看每个“rating”:“@book.ratings.each do{r | r.attributes=params[:rating][r.id.to_]}”。您是从控制台还是从方法中执行此操作?book.ratings.where:user\u id=>1.to\u sql和r.inspect?>>b.ratings.where:user\u id=>28.to\u sql选择\ratings\.\from\ratings\where\ratings\.book\u id=1和\ratings\.\user\u id\=28>>r=b.ratings.where:user\u id=>28.first Rating Load 0.0ms选择ratings.*从ratings.book_id=1和ratings.user_id=28 LIMIT 1>>r.检查问题是关于保持数据库模式尽可能简单。这是与有效载荷的经典关系,应该按照初始post中的描述进行建模。
r = book.ratings.where(:user_id => 1).first
r.rating = 5