Mysql 无法获取rails应用程序中的关联值
作为数据集成场景,我正在现有MySQL数据库上构建一个轻量级web用户界面rails(4.0.0)应用程序。我无法将关联值提取到主实体电影 我通过无迁移的脚手架生成了所有内容(因为数据库是给定的)。这是我的两个表的定义,它们应该关联起来。这些表的名称是单数。因此,我在config/environments/*文件中使用Mysql 无法获取rails应用程序中的关联值,mysql,sql,ruby-on-rails,associations,Mysql,Sql,Ruby On Rails,Associations,作为数据集成场景,我正在现有MySQL数据库上构建一个轻量级web用户界面rails(4.0.0)应用程序。我无法将关联值提取到主实体电影 我通过无迁移的脚手架生成了所有内容(因为数据库是给定的)。这是我的两个表的定义,它们应该关联起来。这些表的名称是单数。因此,我在config/environments/*文件中使用ActiveRecord::Base.pluralize_table_names=false CREATE TABLE `movie` ( `movie_id` int
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
我为此苦苦挣扎了好几个小时,有人知道我遗漏了什么吗?你不是在用rails的方式做这件事 首先对收视率进行评级
class Movie < ActiveRecord::Base
has_many :ratings
end
将把所有具有电影id的分级返回到第一个电影id
Movie.joins(:rating).group("rating.movie_id, rating.title").sum("rating.ratingValue")
我尝试了
Movie.joins(:rating).group(“rating.Movie\u id”).sum(“rating.ratingValue”)
,它给了我Movie\u id=>sum(rating.ratingValue)的散列,所以我几乎做到了。但是我还需要电影的标题,我现在怎么做呢?当你将它与组功能一起使用时,它将不会返回字段。我没有用select找到它。但似乎我的解决方案是Movie.joins(:rating).group(“Movie.title,rating.Movie\u id”).sum(“rating.ratingValue”)
。它给了我想要的结果。非常感谢你Harshall,你帮了我很多!我应该编辑你的答案吗?还是像那样把线留下?我是StackOverflow新手。我知道这不是rails的方式,我肯定会按照你建议的方式来做,以防我可以更改数据库模式,这在这种情况下是不可能的。
Movie.first.ratings
Movie.joins(:rating).group("rating.movie_id, rating.title").sum("rating.ratingValue")