如何从单个控制器

时间:2015-07-07 07:54:06

标签: ruby-on-rails

我想在一个页面上做所有事情。该页面称为users / index.html.erb。

在此页面上,我以json格式返回一个简单的数据库查询。

我还想从同一个数据库返回非json格式的单独查询。

我正试图避免局部因素,因为它们使变量处理变得比我想要的初学者级别更复杂。

这就是我所拥有的:

class UsersController < ApplicationController


def index
     @users = User.including_relationships
     @followas= User.find_by name: params[:name]
     respond_to do |format|
     format.html # index.html.erb
     format.json {  render json: @users } 
     end
end
end

但它并不令人惊讶。如何让它在一个动作中发挥作用?

1 个答案:

答案 0 :(得分:0)

不确定从单个控制器调用返回两种格式的查询的目的。它通常在您大量使用Javascript时发生(例如Angular.js)。 Controller首先返回包含所有HTML模板和javascript的HTML页面,然后在第二轮中返回JSON中的数据。

因此,在您的users / index.html.erb中,您可能会遇到以下内容:

<p ng-repeat='user in users'>{{user.name}}</p>
<script>
  // do a AJAX call to retrieve users in JSON format
</script>

然后,您将再次调用 users / index.json 以检索JSON中的用户信息。

简而言之,您的用户/索引会被调用两次,一次用于html,一次用于JSON。

为了呈现不同的格式,调用相同的控制器方法两次似乎是不明智的。在这种情况下,您可以考虑embed the JSON data in HTML。这样,您只需渲染一次users / index.html.erb,并在客户端通过Javascript解析JSON中的数据。