【发布时间】:2014-01-04 08:52:40
【问题描述】:
我正在现有 MySQL 数据库上构建一个轻量级 Web 用户界面 rails (4.0.0) 应用程序作为数据集成方案。我无法获取主实体 Movie 的关联值。
我通过没有迁移的脚手架生成了所有东西(因为给定了数据库)。这些是我的两个表的定义,应该关联。这些表具有单数名称。所以我在我的 config/environments/* 文件中使用ActiveRecord::Base.pluralize_table_names = false。
CREATE TABLE `movie` (
`movie_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(128) NOT NULL,
`release_day` int(2) DEFAULT NULL,
`release_month` int(2) DEFAULT NULL,
`release_year` int(4) DEFAULT NULL,
`duration` smallint(3) DEFAULT NULL,
`budget` decimal(15,2) DEFAULT NULL,
`revenue` decimal(15,2) DEFAULT NULL,
`description` text,
`ageRestriction` int(11) DEFAULT NULL,
PRIMARY KEY (`movie_id`)
)
CREATE TABLE `rating` (
`movie_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`ratingValue` int(2) DEFAULT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`movie_id`,`user_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `rating_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`movie_id`),
CONSTRAINT `rating_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
)
模型如下所示。
class Rating < ActiveRecord::Base
belongs_to :movie
end
class Movie < ActiveRecord::Base
...
has_many :rating
...
end
问题是,当我尝试在电影控制器中的操作中执行以下查询时,我只得到电影实体的列,而不是评级的列。换句话说,movie.rating 助手不起作用。这是该查询的一个示例。
def best_rated
@movies = Movie.find_by_sql('SELECT m.movie_id, m.title, sum(r.ratingValue) FROM movie m LEFT JOIN rating r ON m.movie_id = r.movie_id group by m.movie_id')
end
我为此苦苦挣扎了好几个小时,有人知道我错过了什么吗?
【问题讨论】:
标签: mysql sql ruby-on-rails associations