使用JBUILDER

时间:2016-03-11 01:48:47

标签: ruby-on-rails ruby json paperclip jbuilder

我正在使用Ruby on Rails构建API。

我的用户使用回形针实现了头像。

我正在尝试在我的JSON输出中访问我的回形针网址,它只是崩溃了我的heroku实例。这在当地非常有效。

我的用户模型的片段

class User < ActiveRecord::Base

  has_attached_file :avatar, styles: { large: "600x600#", medium: "300x300#", thumb: "100x100#" }, default_url: "https://s3.amazonaws.com/whiztutor-marketing/photos/Profile300.png"
  validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/

end

我的用户的My Jbuilder片段

json.cache! @user do
  json.id @user.id
  json.type @user.type
  json.f_name @user.f_name
  json.about @user.about
  json.email @user.email
  json.avatar_url @user.avatar.url(:medium)
  json.referral_code @user.referral_code
  json.education_level @user.education_level
  json.photo_url @user.avatar.to_json
  json.education_details @user.education_details.all
  json.all_subjects @user.subjects.all
  json.all_times @user.all_available_times.each do |time|
    json.day time.schedule.to_s
    json.time_block time.time_as_string
    json.next_occurrence time.schedule.next_occurrence(Time.now)
  end 
end

我尝试将其包装到this question上找到的方法中,它以完全相同的方式打破服务器。我甚至可以运行控制台并直接使用服务器访问这些URL。 JBUILDER和PAPERCLIP的东西不混合,我似乎无法深究它。任何帮助是极大的赞赏。

3 个答案:

答案 0 :(得分:2)

经过几个小时的研究后,最终确诊了这个问题。

问题出在&#34; json.cache! @user do&#34; - 特别是.cache! - 我想节省一些服务器周期并加快速度,所以这就是我最初实现的方法。

无论如何,当我将JBUILDER代码更新为以下内容时,我不再收到500个服务器错误。

我工作的Jbuilder片段给我的用户

json.id @user.id
json.type @user.type
json.f_name @user.f_name
json.about @user.about
json.email @user.email
json.small_photo @user.profile_url_small
json.medium_photo @user.profile_url_medium
json.referral_code @user.referral_code
json.education_level @user.education_level
json.education_details @user.education_details.all
json.all_subjects @user.subjects.all
json.all_times @user.all_available_times.each do |time|
    json.day time.schedule.to_s
    json.time_block time.time_as_string
  json.next_occurrence time.schedule.next_occurrence(Time.now)
end 

答案 1 :(得分:1)

如果不知道错误,很难说出问题可能是什么,但这些事情看起来很可疑或者只是错误:

json.avatar_url @user.avatar.url(:medium)
json.photo_url @user.avatar.to_json

第二个会给你额外的报价,你可能不想要。为什么两者兼而有之?

同样在这里:

json.all_times @user.all_available_times.each do |time|
  json.day time.schedule.to_s
  json.time_block time.time_as_string
  json.next_occurrence time.schedule.next_occurrence(Time.now)
end 

我想你想要这个:

json.all_times @user.all_available_times do |time|
  json.day time.schedule.to_s
  json.time_block time.time_as_string
  json.next_occurrence time.schedule.next_occurrence(Time.now)
end 

答案 2 :(得分:1)

你可以尝试这个来获取json响应中的url,它适用于我将此方法放在你的模型中。

def avatar_url
  avatar.url(:medium)
end

通过覆盖to_json()

从控制器调用此方法
render :json => @friends.to_json(:methods => [:avatar_url])