在我的Rails 4.1.1应用程序(包含jbuilder gem)中,json视图始终输出表中的所有列,忽略app/views/[model]/*.json.jbuilder
个文件。
在routes.rb中,我有:
resources :workshops do
resources :memberships
resources :events
end
在events_controller.rb中,我有:
# GET /workshop/:workshop_id/events
# GET /workshop/:workshop_id/events.json
def index
@events = @workshop.events
respond_to do |format|
format.html
format.json { render json: @events }
end
end
我在控制器中的“before_action”中设置了 @workshop 变量。
当我访问/workshops/f00/events
时,它会按预期以HTML格式显示。
如果我制作文件app/views/events/index.json.jbuilder
:
json.events do
end
...当我访问/workshops/f00/events.json
时,我希望输出为空。但是,我以JSON格式获取整个@events的内容。
我希望看到的只是输出特定字段,给定app/views/events/index.json.jbuilder
包含:
json.array!(@events) do |event|
json.extract! event, :id, :title, :description
json.start event.starts_at
json.end event.ends_at
json.url workshop_event_url([@workshop, event], format: :json)
end
...但是无论.jbuilder文件的内容如何,输出总是相同的。谁能告诉我为什么我的.jbuilder文件被忽略了,以及如何使它工作?
答案 0 :(得分:1)
行format.json { render json: @events }
将始终呈现@events
数组,因为网址/workshops/f00/events
同时接受html
和json
格式,并且您正在呈现{{1}使用@events
格式点击网址时。
如果要在json
更改中呈现数据:
app/views/events/index.json.jbuilder
为:
respond_to do |format|
format.html
format.json { render json: @events }
end
通过不渲染respond_to do |format|
format.html
format.json
end
数组,您依赖Rails输出@events
中的任何内容。