在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:
我在这里错过了什么吗?
答案 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
(对我有用)
您可能会看到人们在做:
<块引用>Jbuilder.encode do |json|
# ...
end
但 Jbuilder.encode
实际上返回一个字符串,如源代码中的 this comment 所指定