1

次のように、「params」を「is_following」メソッドに渡せるようにしたいと思います。

       respond_to |format|
          format.json { render json: @user, :methods => [:is_following params] }
       end

ただし、メソッド名の後に「params」を付けると、エラーがスローされます。

syntax error, unexpected tIDENTIFIER, expecting ']'

JSONを(is_followingメソッドなしで)レンダリングすると、次のようになります。

[{"id":81,"image_url":"https://graph.facebook.com/123213123/picture?type=large","full_name":"John Johnson"},{"id":85,"image_url":"https://graph.facebook.com/123123123/picture?type=large","full_name":"Bill Nye"}]

is_followingメソッドを追加して、JSONが次のように表示されるようにします。

[{"id":81,"image_url":"https://graph.facebook.com/123213123/picture?type=large","full_name":"John Johnson",'is_following'=>4},{"id":85,"image_url":"https://graph.facebook.com/123123123/picture?type=large","full_name":"Bill Nye",'is_following'=>9}]

編集

def friends
  @user = User.first
  respond_to do |format|
    format.json { render json: @user.friends.order("first_name ASC"), :methods => [:is_following], :only => [:id] }
  end
end

モデルのis_followingメソッドは次のとおりです。

def is_following params
    return Friendship.where("user_id = ? AND friend_id = ?", params[:user_id], self.id).count
end

誰もがこれを解決する方法を知っていますか?私はあなたに百万ドルをあげます。

4

1 に答える 1

-1

ブライアン、

このコードを変更するだけです:

:methods => [:is_following params]

:is_following => is_following(params)

編集

とにかくこれを行うためのより良い方法は次のとおりです。

def friends
  @users = User.find_by_sql("SELECT users.*, 
      count(distinct friendships.friend_id) as is_following FROM users
      LEFT JOIN friendships ON users.id = friendships.user_id
      WHERE users.id = " + params[:user_id] + "
      GROUP BY users.id
      ORDER BY users.name ASC")

  respond_to do |format|
    format.json { render json: @users }
  end
end
于 2012-04-17T19:28:12.890 に答える