Ruby on rails json.jbuilder刷新

Ruby on rails json.jbuilder刷新,ruby-on-rails,Ruby On Rails,我在clients/index.json.jbuilder中有一个基本index.json.jbuilder文件: json.array!(@clientsAPI) do |client| json.extract! client, :year, :business_name end 当我在视图中提交表单时,@clientsAPI在clients\u控制器的索引方法中更新。但是,index.json.jbuilder不会得到更新,而是保留旧的@clientsAPI值(在表单提交之前) 如何

我在clients/index.json.jbuilder中有一个基本index.json.jbuilder文件:

json.array!(@clientsAPI) do |client|
  json.extract! client, :year, :business_name
end
当我在视图中提交表单时,
@clientsAPI
在clients\u控制器的索引方法中更新。但是,index.json.jbuilder不会得到更新,而是保留旧的
@clientsAPI
值(在表单提交之前)

如何获取
@clientsAPI
,以便在表单刷新时在index.json.jbuilder中更新

客户机控制代码:

def index
        @clients = Client.all

        begin
          @year_filter = params[:c][:year]
        rescue 
          @year_filter = ["2016"]
        end

        @clientsAPI = @clients.where(year:@year_filter)

        render 'index'
end
clients/index.html.erb表单路由到如上所示的索引方法:

<%= form_for :c, url:clients_path, method: :get" do |f| %>    
  <%= f.select :year, options_for_select(@years),{onchange: "this.form.submit();"} %>
<% end %>

这是未经测试的,但有望让您离得足够近

在表单_for中,您需要告诉它提交一个json请求。比如:

<%= form_for :c, url:clients_path(format: 'json'), method: :get" do |f| %>

结束

您的表单提交到什么操作(创建/更新等)?能否显示该操作的控制器代码,以及相应的create.json.jbuilder/update.json.jbuilder-我猜该操作中没有设置
@clientsAPI
变量。我添加了控制器代码。表单被路由到index方法执行
GET
请求。Rails中的所有内容都可以正常更新,但由于某些原因,index.json.jbuilder中的@clientsAPI在表单提交时没有得到更新。有什么好主意吗?jbuilder应该在表单提交时更新吗?您的表单提交的是json请求还是html?它需要以
格式提交:“json”
,然后您必须确保在控制器中响应json格式:
respond_to do | format |……等
。我不确定你的
export\u grid\u if_request
块会做什么,但是如果你到达那里,它将只呈现html响应而不是index.json.jbuilderI取出
export\u grid\u if_request
,所以现在它总是点击
呈现索引
,我还显示了get请求表单。您是否介意发布一个关于如何
呈现index
和刷新index.json.jbuilder
@clientsAPI
变量的答案?因此,这就接近了。但它总是呈现json响应。我需要它来呈现json和索引。您知道如何呈现这两者吗?您需要如何处理html和json响应?我认为rails并不是真的设计为从一个请求中呈现多个响应。对于一种或另一种格式,您应该可以做您需要做的事情。我在视图中有一个角度表,用于读取.json响应并显示数据。该视图还显示rails中的图表。因此,我尝试在rails图表和angular表中显示更新后的信息。在这种情况下,我建议您显示rails中的任何html,然后在加载angular后,让angular执行json请求(使用angular$http服务),获取json对象并将其加载到相应的angular scope变量中。这实际上正是表所做的。但是,由于某些原因,当angular执行$http请求时,jbuilder中的
@clientsAPI
变量不会使用表单中的最新参数进行更新。因此,控制器逻辑运行,更新rails数据,但角度数据保持不变。。有什么想法吗?
def index
    @clients = Client.all

    begin
      @year_filter = params[:c][:year]
    rescue 
      @year_filter = ["2016"]
    end

    @clientsAPI = @clients.where(year:@year_filter)

    respond_to do |format|
      format.html {
       render 'index'
       }
      format.json {
       #any logic here specific to a json request.
       #doing nothing will render index.json.jbuilder by default
       }
    end