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

时间:2014-01-04 08:52:41

标签: 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(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

我对此持续了好几个小时,是否有人有线索,我错过了什么?

2 个答案:

答案 0 :(得分:1)

试试这个

Movie.joins(:rating).group("rating.movie_id, rating.title").sum("rating.ratingValue")

答案 1 :(得分:0)

你不是以铁路方式做这件事

首先对评级进行评级

class Movie < ActiveRecord::Base
has_many :ratings
end
数据库表中的

电影应该有id字段而不是movie_id

现在,如果您想要访问电影的所有评级

Movie.first.ratings 

会将所有具有movie_id eqauls的评分返回给第一个电影ID