3 つのテーブルがあります。Area
、Movie
およびMovieArea
。Rails で、 のフィールドにMovieArea
基づいてクエリできるようにしたい。次に、 のフィールドを使用し、同じ名前のフィールドを の値に置き換えて、複合 json オブジェクトを返したいと思います。area_id
Movie
Movie
MovieArea
次のデータベース構造があります。
そして、次のモデル:
class Movie < ActiveRecord::Base
attr_accessible :title, :synopsis, :grossing, :director, :year, :facts
has_many :movie_areas, :class_name => 'MovieArea'
end
class Area < ActiveRecord::Base
attr_accessible :name
has_many :movie_areas, :class_name => 'MovieArea'
end
class MovieArea < ActiveRecord::Base
attr_accessible :movie_id, :area_id, :synopsis, :facts
belongs_to :area, :class_name => 'Area', :foreign_key => :area_id
belongs_to :movie, :class_name => 'Movie', :foreign_key => :movie_id
end
最後に、モデル メソッドを使用し、JSON 応答を変更して、このオブジェクトを作成しようとしました。モデルに次を追加します。
def grossing
self.movie.grossing
end
def year
self.movie.year
end
def title
self.movie.title
end
など..そしてコントローラーで:
@results = MovieArea.where(:area_id => @area.id)
最後に、ビューで:
<%= @results.to_json(:methods => [:grossing, :year, :title] ).html_safe -%>
これは正常に機能し、必要な JSON オブジェクトのタイプを取得します。
[
{
"id":1,
"area_id":1,
"movie_id":1,
"synopsis":"Area relevant movie synopsis",
"facts":"Area relevant movie facts",
"grossing":"$9001M",
"year":"1999",
"title":"Movie title",
},
.....
]
質問は次のとおりです。これを行うためのより良い方法はありますか? たとえば、モデルからすべてを出力して、次のように呼び出すことはできMovieArea.where(:area_id => @area.id).some_function_to_respond
ますか? または、ロジックをコントローラーに移動して、ビューで単に呼び出すことはできます@results.to_json()
か?
ありがとうございました!