Rails 4 * .json.jbuilder文件被忽略

时间:2014-06-22 20:30:08

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

在我的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文件被忽略了,以及如何使它工作?

1 个答案:

答案 0 :(得分:1)

format.json { render json: @events }将始终呈现@events数组,因为网址/workshops/f00/events同时接受htmljson格式,并且您正在呈现{{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中的任何内容。