如何在Rails视图中呈现JSON

时间:2012-05-07 15:12:11

标签: ruby-on-rails-3 json

我尝试了以下示例的解决方案:In Rails, how do you render JSON using a view?

但我的问题是数据库已经保存了JSON字符串,我拉了json字符串然后我应该能够在视图中显示JSON文件。

我正在使用这个因为Android平板电脑应该能够访问相同的网址但是根据其设置(通过POST发送)应该显示不同的JSON文件,Android平板电脑然后获取json并使用它来配置一些选项。

所以我已经有了一个完整的json文件,我正在寻找一种在视图中显示它的方法(没有渲染html标签和其他东西)。我尝试了以下(是的,我添加了respond_to:json):

# def show_json (@config is the record, @config.json_config is the actual json configuration file
@config = event.et_relationships.where(terminal_id: terminal).first
respond_to do |format|
   format.json
end

然后我的观点

#show_json.json.erb
<%= @config.config_json %>

然后我看到的HTML(没有给出错误)

<html><head><style type="text/css"></style></head><body></body></html>

谢谢!

修改

我正在使用rails 3.2.3

这是我的路线(仅相关部分)

match '/events/config', to: "events#show_json", as: :show_json
resources :events do
    member do
      get :select_item
      get :category
    end
  end

然后是控制器(部分)

respond_to :html, :json, :js
def show_json
    #terminal_id = params["mac"]
    terminal_id = "3D:3D:3D:3D:3D:3D"
    event = current_user.events.where("date(endtime) > ? AND date(starttime) < ?", Time.now.to_s, Time.now.to_s).first
    if event.nil?
      # Nothing got returned so we use the default event
      event = current_user.events.where('"default" = ?', true).first
    end
    logger.info "MAC: #{terminal_id}"
    terminal = current_user.terminals.where(serial: terminal_id).first
    logger.info "Terminal: #{terminal.attributes.inspect}"
    logger.info "#{event.attributes.inspect}"
    @config = event.et_relationships.where(terminal_id: terminal).first
    logger.info "CONFIG #{@config[:config_json]}"

    respond_to do |format|
      format.json { render json: @config[:config_json] }
    end
  end

1 个答案:

答案 0 :(得分:1)

使用render

@config = event.et_relationships.where(terminal_id: terminal).first
respond_to do |format|
   format.json { render json: @config }
end

然后你有路径/:model/:action.json