0

多対多関連付けのオートコンプリート リストに jQuery Tokeninput を使用する方法については、Ryan Bates のスクリーンキャストに従いました。ここで、各結果の写真を取り込みたいと思います。私は Paperclip を使用しており、コントローラーでこれを行うことにより、JSON ファイルに渡された URL を取得します。

format.json { render :json => @users.map(&:photo_url) }

属性を JSON ファイルに渡すための Ryan のコードは次のとおりです。

format.json { render :json => @users.map(&:attributes) }

:attributesしかし、この 2 つを組み合わせて JSON ファイルにと:photo_urlメソッドの両方を表示するにはどうすればよいでしょうか?

以下のコードを含むさまざまなことを試しましたが、何も機能していないようです。で呼び出されるメソッドは 1 つだけのよう.mapです。

// Doesn't work
format.json { render :json => @users.map(&:attributes, &:photo_url) }

// Doesn't work
format.json { render :json => @users.map(&:attributes).map(&:photo_url) }
4

2 に答える 2

2

これは役に立ちますか?(注 - 私は夜の外出から戻ったばかりで、100% ではないので、あなたの質問を完全に誤解している可能性があります。)

これにより、配列の配列が作成されます。配列の最初の要素にはユーザーの属性が含まれ、2 番目の要素には写真の URL が含まれます。

@users.map {|u| [u.attributes, u.photo_url]}

これにより、上記の配列と同様にハッシュが作成されます。ただし、最初の要素の名前は「attributes」、2 番目の要素の名前は「photo_url」です。

@users.map {|u| {:attributes => u.attributes, :photo_url => u.photo_url}}

それらのいずれかまたは両方を接続してみてください。それらはあなたのために働くはずです。

(例format.json { render :json => @users.map {|u| [u.attributes, u.photo_url]} })。


編集:

ちょうど別の考えがありました。

2 つを 1 つのコレクションにマージできます (配列内の個別の要素ではなく、1 つのハッシュにすべてを含めることができます)。

@users.map {|u| u.attributes.merge(:photo_url => u.photo_url)}

これは、ハッシュphoto_urlにキーとして追加されます。attributesJSON を読み取るために記述したコードが何であれ、より簡単に機能する可能性があります。

于 2012-12-11T06:27:15.033 に答える