Ruby on rails json.jbuilder刷新
我在clients/index.json.jbuilder中有一个基本index.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值(在表单提交之前) 如何
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