Javascript AJAX请求无法从Rails应用程序中的控制器获取实例变量

Javascript AJAX请求无法从Rails应用程序中的控制器获取实例变量,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我正在尝试将控制器中的数据导入rails应用程序中的javascript文件。html使用select选项和组织id作为参数立即调用ajax请求 在我之前的过滤器里 def set_org_id if params[:id].present? @org_id = klass.find(params[:id]).id else @org_id = 0 end end 在js文件中,我有: $.ajax({ url: "/admin/anal

我正在尝试将控制器中的数据导入rails应用程序中的javascript文件。html使用select选项和组织id作为参数立即调用ajax请求

在我之前的过滤器里

def set_org_id
    if params[:id].present?
        @org_id = klass.find(params[:id]).id
    else
        @org_id = 0
    end
end
在js文件中,我有:

$.ajax({ url: "/admin/analytics/filter",
        type: 'GET',
        data: {
          time_frame: selectedId,
          organization_id: <%= @org_id %>
        }
})
如果我硬编码一个数字作为组织id,一切正常,但是当我试图从before过滤器传递数据时,我在页面中没有id


我应该补充一点,索引路由是admin/analytics/。过滤操作是管理/分析/过滤。用户从不导航到该页面,只有ajax点击过滤路径来获取相关数据。这可能是在设置实例变量之前发送ajax请求吗?如果是这样,正确的解决方案是什么?

我可以通过将数据传递到html.erb页面中的隐藏字段来解决这个问题

<%= hidden_field_tag('org_id', @org_id) %>

我不喜欢这个,但至少它能工作。

你的JS将无法访问你的@instance变量,除非你从你的控制器本身调用它们。这里的问题是,如果加载ajax以访问实例varialbe,那么这根本不起作用

让我解释一下

JS

被称为客户端语言,这意味着它可以让您相对不受惩罚地访问HTML/中的元素。这里的问题是,Rails/Ruby与PHP非常相似,是服务器端的,因此只能向浏览器提供渲染数据

这意味着调用以下命令根本不起作用:

data: {
   time_frame: selectedId,
   organization_id: <%= @org_id %>
}
这将使您能够调用:

$(document).on("submit", "form", function(){
   $.ajax({
      ...
      data: {
        time_frame: selectedId,
        organization_id: $(this).data("org_id")
      }
   });
});
<%= form_tag route_path, data: { org_id: @org_id } %>
$(document).on("submit", "form", function(){
   $.ajax({
      ...
      data: {
        time_frame: selectedId,
        organization_id: $(this).data("org_id")
      }
   });
});