2016-01-08 75 views
2

我有拖车模式,电影模式。当创建一个电影,我期待所有可用的预告片,并把他们中的每一个与YouTube的链接,并且已添加电影的movie_id记录。连接两个模型通过ID

def index 
    trailer = Trailer.all 
    respond_to do |format| 
    format.json do 
     render :json => trailer.to_json(:only => [:id, :movie_id, :link]) 
    end 
    end 
end 

并且json输出,

[ 
    { 
    "id":1, 
    "movie_id":"312221", 
    "link":"LsjX5dqHLuw" 
    }, 
    { 
    "id":2, 
    "movie_id":"209112", 
    "link":"nIGtF3J5kn8" 
    }, 
    { 
    "id":3, 
    "movie_id":"209112", 
    "link":"yViIi3gie2c" 
    }, 
    { 
    "id":4, 
    "movie_id":"209112", 
    "link":"Onh7NbZ7F8o" 
    }, 
    { 
    "id":5, 
    "movie_id":"290250", 
    "link":"1Vb32Kokbtg" 
    }, 
    { 
    "id":6, 
    "movie_id":"290250", 
    "link":"1Vb32Kokbtg" 
    }, 
    { 
    "id":7, 
    "movie_id":"27205", 
    "link":"8hP9D6kZseM" 
    }, 
    { 
    "id":8, 
    "movie_id":"157336", 
    "link":"ePbKGoIGAXY" 
    }, 
    { 
    "id":9, 
    "movie_id":"157336", 
    "link":"KlyknsTJk0w" 
    }, 
    { 
    "id":10, 
    "movie_id":"157336", 
    "link":"nyc6RJEEe0U" 
    }, 
    { 
    "id":11, 
    "movie_id":"157336", 
    "link":"Lm8p5rlrSkY" 
    }, 
    { 
    "id":12, 
    "movie_id":"157336", 
    "link":"zSWdZVtXT7E" 
    } 
] 

然后,我有我的电影控制器,

def index 
    @movie = Movie.all 
    respond_to do |format| 
    format.json do 
     render :json => @movie.to_json(include: :trailers) 
    end 
    end 
end 

的json的输出,

[ 
    { 
    "id":1, 
    "title":"Creed", 
    "release_date":"2016-01-21", 
    "image":"/xSE4NBFDzqedwa4AIj99r1Z7ljF.jpg", 
    "user_id":null, 
    "created_at":"2016-01-07T20:19:43.849Z", 
    "updated_at":"2016-01-07T20:19:43.849Z", 
    "movie_id":"312221", 
    "backdrop":"/nF4kmc4gDRQU4OJiJgk6sZtbJbl.jpg", 
    "crew":null, 
    "cast":null, 
    "trailers":[ 

    ] 
    }, 
    { 
    "id":2, 
    "title":"Batman v Superman: Dawn of Justice", 
    "release_date":"2016-03-24", 
    "image":"/eJrlh2g9UGAd7R6mQAOQIIs329H.jpg", 
    "user_id":null, 
    "created_at":"2016-01-07T20:21:02.615Z", 
    "updated_at":"2016-01-07T20:21:02.615Z", 
    "movie_id":"209112", 
    "backdrop":"/15PbZtjRJ4zgQA8XS0otL70piQi.jpg", 
    "crew":null, 
    "cast":null, 
    "trailers":[ 

    ] 
    }, 
    { 
    "id":3, 
    "title":"The Nice Guys", 
    "release_date":"2016-05-26", 
    "image":"/ecD35nDfjsxvDW5BtmK6YAaIkzF.jpg", 
    "user_id":null, 
    "created_at":"2016-01-07T20:22:05.960Z", 
    "updated_at":"2016-01-07T20:22:05.960Z", 
    "movie_id":"290250", 
    "backdrop":"/aEMBBMuK3BhKIuFu7iFSTXC41Bi.jpg", 
    "crew":null, 
    "cast":null, 
    "trailers":[ 

    ] 
    }, 
    { 
    "id":4, 
    "title":"Inception", 
    "release_date":"2010-07-22", 
    "image":"/qmDpIHrmpJINaRKAfWQfftjCdyi.jpg", 
    "user_id":null, 
    "created_at":"2016-01-08T09:22:30.383Z", 
    "updated_at":"2016-01-08T09:22:30.383Z", 
    "movie_id":"27205", 
    "backdrop":"/s2bT29y0ngXxxu2IA8AOzzXTRhd.jpg", 
    "crew":null, 
    "cast":null, 
    "trailers":[ 

    ] 
    }, 
    { 
    "id":5, 
    "title":"Interstellar", 
    "release_date":"2014-11-06", 
    "image":"/nBNZadXqJSdt05SHLqgT0HuC5Gm.jpg", 
    "user_id":null, 
    "created_at":"2016-01-08T09:22:39.120Z", 
    "updated_at":"2016-01-08T09:22:39.120Z", 
    "movie_id":"157336", 
    "backdrop":"/xu9zaAevzQ5nnrsXN6JcahLnG4i.jpg", 
    "crew":null, 
    "cast":null, 
    "trailers":[ 

    ] 
    } 
] 

有没有一种方式,我可以查找所有有sa的拖车我movie_id值作为一部电影,并将其包括到json渲染?

的disered结果会是这样的事情,

{ 
    "id":5, 
    "title":"Interstellar", 
    "release_date":"2014-11-06", 
    "image":"/nBNZadXqJSdt05SHLqgT0HuC5Gm.jpg", 
    "user_id":null, 
    "created_at":"2016-01-08T09:22:39.120Z", 
    "updated_at":"2016-01-08T09:22:39.120Z", 
    "movie_id":"157336", 
    "backdrop":"/xu9zaAevzQ5nnrsXN6JcahLnG4i.jpg", 
    "crew":null, 
    "cast":null, 
    "trailers":[ 
     { 
     "id":8, 
     "movie_id":"157336", 
     "link":"ePbKGoIGAXY" 
     }, 
     { 
     "id":9, 
     "movie_id":"157336", 
     "link":"KlyknsTJk0w" 
     }, 
     { 
     "id":10, 
     "movie_id":"157336", 
     "link":"nyc6RJEEe0U" 
     }, 
     { 
     "id":11, 
     "movie_id":"157336", 
     "link":"Lm8p5rlrSkY" 
     }, 
     { 
     "id":12, 
     "movie_id":"157336", 
     "link":"zSWdZVtXT7E" 
     } 
    ] 
    } 

回答

0

您可以通过movie_id拖车查询:

@movie = Movie.first 
@trailers = Trailer.where(movie_id: @movie.id) 

你可能要研究协会。如果你的电影的has_many预告片,那么你可能最终只是做:

@trailers = @movie.trailers 

Ruby on Rails Guide: ActiveRecord Associations

+0

我想我会加入到我的电影控制器索引定义吧?但我不明白这是如何将预告片添加到我的json响应中的。 –

0

您可以尝试显示拖车在电影

你婉包括在JSON与电影预告片

def index 
@movies = Movie.order('created_at desc') 
    respond_to do |format| 
    format.json do 
     render :json => @movies.to_json(:include => { :trailers => { :only => [:id, :movie_id, :link] } }) 
    end 
    end 
end 

如果你想包含特定电影预告片

然后在电影模式

对于轨> 4

has_many :trailers, -> { where(id: self.movie_id) } 
+0

我不认为这是我想要的。我想在我的电影模型中加入预告片。 –

+0

包括电影模式意味着拖车可以请你解释不了一切都在这里,你说:“有什么办法,我可以查找所有具有相同movie_id值拖车” –

+0

你想加入我的想法?那么你可以做一个有很多通过与他们的关联,然后使用加入/中间模型 –