【问题标题】:Rails 4 *.json.jbuilder files ignoredRails 4 *.json.jbuilder 文件被忽略
【发布时间】:2014-08-12 21:00:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    format.json { render json: @events } 行将始终呈现 @events 数组,因为 url /workshops/f00/events 接受 html 和 json 格式,并且您在使用 json 格式点击 url 时呈现 @events .

    如果要渲染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
    

    通过不渲染 @events 数组,您依赖 Rails 输出 app/views/events/index.json.jbuilder 中的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 2013-05-23
      • 2015-11-09
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多