标签: jbuilder

在JSON JBuilder中渲染html partial

我正在使用Rails 4中的JBuilder渲染一些学生的JSON.我希望每个学生都有一个"html"属性,其中包含给定学生的HTML部分:

[
  { html: "<b>I was rendered from a partial</b>" }
]
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

json.array! @students do |student|
  json.html render partial: 'students/_student', locals: { student: student }
end
Run Code Online (Sandbox Code Playgroud)

但这给了我:

Missing partial students/_student with {:locale=>[:en], :formats=>[:json], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :haml]}.
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails jbuilder ruby-on-rails-4

14
推荐指数
2
解决办法
7037
查看次数

如何在jbuilder中渲染一次?

我想渲染一个像这样的jbuilder模板:

json.author do
  json.partial! 'user', user: @user
end
json.owner do
  json.partial! 'user', user: @user
end
Run Code Online (Sandbox Code Playgroud)

渲染一个部分两次似乎是浪费,我可以像这样渲染吗?

user_json = json.some_render_partial! 'user', user: @user
json.author { user_json }
json.owner { user_json }
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails jbuilder

11
推荐指数
1
解决办法
278
查看次数

Rails jbuilder DateTime将小数添加到秒

我正在使用JBuilder来呈现应用程序的JSON API部分的视图.我遇到的问题是我的DateTimes被渲染成这样:

"2013-07-02T17:03:18.000Z"

...当我真正想要的是这个:

"2013-07-02T17:03:18Z"

我不确定这些小数来自哪里......

我以典型的JBuilder方式渲染字段:

json.my_datetime_field
Run Code Online (Sandbox Code Playgroud)

我的应用中有一个日期格式初始值设定项:

Date::DATE_FORMATS[:default] = '%Y/%m/%d %Z'
Time::DATE_FORMATS[:default] = '%Y/%m/%d %H:%M:%S %Z'
Date::DATE_FORMATS[:month_day_year] = '%m-%d-%Y'
Run Code Online (Sandbox Code Playgroud)

但是,这似乎并没有影响JBuilder,这很好.我希望ISO8601格式来自我的API.顺便说一下,我正在使用Rails 4.0.0决赛.

datetime ruby-on-rails jbuilder ruby-on-rails-4

10
推荐指数
1
解决办法
3449
查看次数

使用Jbuilder(或其他)Rails JSON API布局

在我的rails 3.2应用程序中,我使用jbuilder来呈现来自我的JSON api的响应.

我想为所有API响应提供一个通用结构,并且布局可能是保持我的视图DRY的可能解决方案.

例如:我希望每个回复都是以下形式:

{
  status: "ok|error|redirect",
  data:   { ... JSON specific to the current view ... },
  errors: [ ... ],
  notes:  [ ... ]
}
Run Code Online (Sandbox Code Playgroud)

(其中数据的值是视图提供的json结构,其他所有内容都来自布局)

但是:我无法正确地让jbuilder布局屈服于视图.

# in layout 
json.data yield

# in view
json.some "value"
Run Code Online (Sandbox Code Playgroud)

结果是:

{"data":"{\"some\":\"value\"}"}  # arg! my json has become a string
Run Code Online (Sandbox Code Playgroud)

以另一种方式尝试:

# in layout 
yield

# in view
json.data do |json|
  json.some "value"
end
Run Code Online (Sandbox Code Playgroud)

结果是 :

{}
Run Code Online (Sandbox Code Playgroud)

有没有人用jbuilder或其他json模板gem /方法做到这一点?

这个juilder github问题表明这是可能的,但表明其他人也有类似的问题.

我看到rabl(https://github.com/nesquena/rabl/)应该支持布局(https://github.com/nesquena/rabl/wiki/Using-Layouts),但我决定不使用由于其他原因(rabl使复杂的json结构成为一场噩梦,特别是在试图控制对象根等时).

layout json ruby-on-rails jbuilder

9
推荐指数
3
解决办法
8417
查看次数

生成脚手架时跳过jbuilder文件?

当我脚手架时,我不希望它生成这些文件:

invoke    jbuilder
create      app/views/tests/index.json.jbuilder
create      app/views/tests/show.json.jbuilder
Run Code Online (Sandbox Code Playgroud)

但是怎么样?在我的application.rb我有这个:

config.generators do |g|
  g.assets            false
  g.helper            false
  g.test_framework    nil
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails jbuilder scaffold

9
推荐指数
1
解决办法
2734
查看次数

用于api的Rabl,Jbuilder或手动json构建?

要为大规模应用程序构建api,哪种方法是更好的性能,我应该使用Rabl,Jbuilder还是手动构建json对象?我正在为移动应用程序构建api /端点.

api json ruby-on-rails jbuilder rabl

8
推荐指数
1
解决办法
3718
查看次数

Rails 4如何加速json渲染

我有1500个小对象来渲染rails 4应用程序中的web服务.我使用json作为格式与jbuilder模板.我已经在app初始化程序中将json引擎更改为oj:

 require 'oj_mimic_json'
#MultiJson.use :yajl

Oj.mimic_JSON

# jbuilder json templates
Jbuilder.key_format camelize: :lower
Run Code Online (Sandbox Code Playgroud)

单个渲染的json对象如下所示:

center: {lat: 45.962153536249, lon: 7.68207088549831}
lat: 45.962153536249
lon: 7.68207088549831
n: "Zermatt-Cervinia"
st: 80
sy: 0


Rendered json_partials/_snow_in_resort.json.jbuilder (0.5ms)
Rendered json_partials/_snow_in_resort.json.jbuilder (0.5ms)
....
Rendered resorts/find.json.jbuilder (4213.4ms)
Completed 200 OK in 4351ms (Views: 3924.3ms | ActiveRecord: 306.8ms | Solr: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

但是我的本地主机上仍然需要150毫秒的101 kb,这对于我想在UI上完成的任务来说太慢了.我需要做些什么来加速这里?我应该检查哪些事项?我很感激帮助.最好,菲利普

更新

我将我的活动记录查询优化到ActiveRecord:77.8ms,但视图渲染仍然太慢

performance json rendering jbuilder ruby-on-rails-4

8
推荐指数
1
解决办法
3562
查看次数

如何从JBuilder视图委托模型的to_builder方法?

假设我有一个Person类和一个Gang类

class Person
  belongs_to :gang
  attr_accessible :name, :secret

  def to_builder
    Jbuilder.new do |app|
      person.id id
      person.name name
    end
  end
end

class Gang
  has_many :people
  attr_accessible :name
end
Run Code Online (Sandbox Code Playgroud)

如何从视图中使用此to_builder方法?

例如

#app/views/gang/show.json.jbuilder (@gang set by the controller)

json.gang do |json|
  json.name @gang.name
  json.gang_members(@gang.people) do |person|
     #how do I delegate to the person.to_builder here?
  end
end
Run Code Online (Sandbox Code Playgroud)

请注意,我不想只使用默认的Person.as_json,因为我不想secret在Person上呈现属性.

我尝试过的大多数事情最终都是渲染了Person.as_json,而不是Person.to_builder.

ruby-on-rails jbuilder actionview ruby-on-rails-3

7
推荐指数
1
解决办法
1655
查看次数

Rails用jbuilder显示错误的正确方法

我希望在jbuilder视图中显示错误消息.例如,我可能有的一条路线可能是:

/foos/:id/bars

如果:id用户提交的内容不存在或无效,我希望能够在我的index.json.builder文件中相应地显示错误消息.

使用Rails,完成这项工作的最佳方法是什么?控制器可能具有以下内容:

def index
  @bar = Bar.where(:foo_id => params[:id])
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,params[:id]可能是nil,或该对象可能不存在.我不确定这里做的最好的事情是在控制器中处理它并显式渲染error.json.builder,或者在index.json.builder视图中处理它.这样做的正确方法是什么,如果它在index.json.builder,params[:id]可以在那里检查?我知道我可以看到反过来@bar.nil?但不确定吗?

ruby json ruby-on-rails jbuilder

7
推荐指数
2
解决办法
5130
查看次数

Jbuilder没有使用gem rails-api

我正在尝试使用jbuilder的rails-api gem,而我似乎无法使其工作

这是我的rails-api控制器/ jbuilder视图的示例

的Gemfile

gem 'jbuilder'
Run Code Online (Sandbox Code Playgroud)

控制器app/controller/users_controller.rb

 def show
  @user = User.find_by(id: params[:id])
 end
Run Code Online (Sandbox Code Playgroud)

查看app/views/users/show.json.builder

json.content format_content(@user.id)
Run Code Online (Sandbox Code Playgroud)

根据Jbuilder文档,这应该可以正常工作,但仍然没有返回任何内容.

谢谢您的帮助!

jbuilder rails-api ruby-on-rails-4

7
推荐指数
1
解决办法
2535
查看次数