web-dev-qa-db-ja.com

Ruby to_json:methods arguments

オブジェクトでto_jsonメソッドを使用しており、:methods引数を機能させようとしています。モデル(ドロップ)にis_favorited_by_user?というメソッドがあります。このメソッドは、current_userの引数を取り、ドロップがユーザーにお気に入りかどうかを確認します。 to_jsonメソッドを通じてこの引数を渡すにはどうすればよいですか。

render :json => @drops.to_json(:methods => :is_favorited_by_user?(current_user))
26
James Finley

あなたは付け加えられます current_user属性をモデルに設定し、実行前に設定しますto_json

  attr_accessor :current_user

  def is_favorited_by_user?(user=nil)
    user ||= current_user
    # rest of your code
  end


@drops.current_user = current_user
render :json => @drops.to_json(:methods => :is_favorited_by_user?)
45
Voyta

メソッドto_jsonテイクは、引数を取るものではなく、単なる「ゲッター」メソッドです。 (通常、db属性に基づいて作成されたものです。)

ここの例を参照してください。引数を渡すものはありません。

http://apidock.com/Rails/ActiveRecord/Serialization/to_json

カスタム何かをしたい場合は、必要な情報のハッシュを構築するメソッドを作成し、そのハッシュをjsonに変換する必要があります。

4
user65663