2016-01-08 130 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

你想加入我的想法?那麼你可以做一個有很多通過與他們的關聯,然後使用加入/中間模型 –