控制器中Jbuilder的基本用法

时间:2019-01-08 09:08:47

标签: ruby-on-rails jbuilder

在Rails(5.2)应用程序中,我试图使用JBuilder返回一些JSON作为响应。

我已经在我的Gemfile中添加了JBuilder。

# Gemfile
...
gem 'jbuilder', '~> 2.5'
...

# Gemfile.lock
...
jbuilder (2.8.0)
...

根据JBuilder文档:

  

您还可以直接从数组中提取属性。

     

@people = People.all

     

json.array! @people,:id,:name

     

=> [{“ id”:1,“ name”:“ David”},{“ id”:2,“ name”:“ Jamie”}]

现在,在我的控制器中,我添加了以下内容:

def index
  respond_to do |format|
    format.json { render json.array! User.all, :email, :full_name }
  end
end

但是我明白了

  

NameError-未定义的局部变量或方法'json'   UsersController:0x00007fe2f966f150 16:55:40 rails.1
  | =>你的意思是? JSON:

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:3)

您通常在带有扩展名.json.jbuilder的视图文件中使用jbuilder

在您的控制器中:

def index 
  @users = User.all
  respond_to do |format|
    format.json 
  end
end 

在您的app/views/users/index.json.jbuilder

json.array! @users, :email, :full_name

编辑:您也可以像这样从控制器执行此操作:

format.json { render json: Jbuilder.new { |json| json.array! User.all, :email, :full_name  }.target! }

答案 1 :(得分:0)

您可以:

def index
  Jbuilder.new do |json|
    json.array! User.all, :email, :full_name
  end.attributes!
end

(对我有用)

Source


附注

您可能会看到人们在做:

<块引用>
Jbuilder.encode do |json|
 # ...
end

Jbuilder.encode 实际上返回一个字符串,如源代码中的 this comment 所指定