我想在一个页面上做所有事情。该页面称为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
但它并不令人惊讶。如何让它在一个动作中发挥作用?
答案 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中的数据。