4

私はRubyonRailsを使用していて、2つのモデルがあります。目標は、2つのモデルでWebサイトを検索することです。私は、twitter typeaheadを使用していますが、jsonは1つのオブジェクトでなければなりません。

2つのオブジェクトを1つに変換する最良の方法がわかりません。ここにコード

@users= Search.user(params[:query])
@articles= Search.article(params[:query])
respond_to do |format|
  format.html # index.html.erb
  format.json {
    render :json => {
     :art=> @articles.map(&:title),
     :user=> @users.map(&:first_name)
  }}
  end
end

最善の方法がわからないか、これら2つのモデルを1つにマージするための最良のドキュメントが見つからないようです。to_json、as_json、またはconcatが最適かどうかはわかりません。

アイデアは、次のjsonの結果を取得することです。

{"art":["John","Serge","Dean","feng","Heather"],"user":["Ontario high school teachers drop next week's walkout plan","Air Canada to appeal Quebec court ruling on Aveos"]}

以下へ

{"result":["John","Serge","Dean","feng","Heather", "Ontario high school teachers drop next week's walkout plan","Air Canada to appeal Quebec court ruling on Aveos"]}
4

2 に答える 2

2

JSONビューテンプレートを使用することをお勧めしますか?多くのオプションがありますが、最も人気のある2つはRABLとJBuilderです。RABLの逸品を強くお勧めします。

それらの人気には理由があり、jsonのレンダリングを簡単にします

RABLの宝石はここhttps://github.com/nesquena/rablで見つけることができます

JBuilderの宝石はhttps://github.com/rails/jbuilderにあります。

それらの両方にそれらの使用方法を示す優れたrailsastがあります。

RABL http://railscasts.com/episodes/322-rabl

JBuilder http://railscasts.com/episodes/320-jbuilder

私は純粋に個人的な好みからRABLを好みます。どちらが自分に最も適しているかを確認するには、両方のオプションを確認する必要があります。

宝石を追加することは通常私がお勧めするものではありませんが、これらのソリューションのいずれかがあなたのニーズに合うことがわかると思います

于 2013-03-05T01:49:10.753 に答える
2

したがって、ユーザーと記事の両方の配列を取得する場合は、次のようになります。

respond_to do |format|
  format.json  { render :json => {:art => @articles, 
                                  :user => @users }}

  end
end

編集に基づく:

format.json {
  render :json => {
    result => @articles.map(&:title) | @users.map(&:first_name)
}}

最後のコメントに基づいて、nilの問題をトラップします。

format.json {
  render :json => {
    result => (@articles.map(&:title) || []) | (@users.map(&:first_name) || [])
}}
于 2013-03-05T01:50:06.883 に答える