Mysql 无法获取rails应用程序中的关联值

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

作为数据集成场景,我正在现有MySQL数据库上构建一个轻量级web用户界面rails(4.0.0)应用程序。我无法将关联值提取到主实体电影

我通过无迁移的脚手架生成了所有内容(因为数据库是给定的)。这是我的两个表的定义,它们应该关联起来。这些表的名称是单数。因此,我在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

我为此苦苦挣扎了好几个小时,有人知道我遗漏了什么吗?

你不是在用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")