所以我有一个rails应用程序,它充当我的ios应用程序的后端服务器。我的rails应用程序有一个Users控制器和Avatars Controller。用户控制器负责用户,Avatar控制器负责用户个人资料图片。用户模型和头像模型之间的关系是
User has_one :avatar
& Avatar belongs_to :user
每个用户has_many friends
(用户模型)。现在我希望得到每个用户的所有朋友,并以json格式将其发送到我的ios客户端,所以我这样做
@friends = @user.friends
@usernames = ""
for friend in @friends
@usernames << friend.username + ","
end
respond_to do |format|
format.json {render :json => @usernames}
end
for循环是我只发送我需要的东西。它使数据更小,更安全,因为我不发送他们的auth_token。这很好但现在我要做的就是发送每个'朋友'的头像。我做的是我尝试使用for
循环来附加每个avatar.image(我使用Carrierwave上传我的数据和Cloudinary作为我的存储)到@avatars变量并发送但不起作用。这是代码:
@friends = @user.friends
@usernames = ""
@avatars = ""
for friend in @friends
@usernames << friend.username + ","
@avatars << friend.avatar.image + ","
end
respond_to do |format|
format.json {render :json => {users = @usernames, avatars = @avatars}}
end
以下是我得到的错误expecting tASSOC
...r :json => {users = @usernames, avatars = @avatars}}
答案 0 :(得分:1)
在您的代码中,您将拥有单独的头像和用户名,它们之间没有任何关系。您最好创建一个包含用户名和头像的用户哈希数组:
friends = []
@user.friends.each do |friend|
friends << { username: friend.username, avatar: friend.avatar.image }
end
respond_to do |format|
format.json { render :json => friends.to_json }
end
答案 1 :(得分:1)
您收到的消息表示格式错误。相反,将您的JSON作为键值对传递:
format.json {render :json => {'users' => @usernames, 'avatars' => @avatars}}