将Javascript变量传递给Rails部分

我是Rails的新手,我正在努力完成一项显而易见的任务。 我有一个(剥离)forms:

 'form-inline' } do |f| %> 
Order

当我点击’获取报价’并且当符号文本字段失去焦点时,我想在div $(#here)中在Google财经中呈现报价。 我已经编写了代码来提取Ruby中的引用。

在routes.rb中,我添加了:

  resources :orders do get 'view_quote', on: :collection end 

在order_controller.rb中我添加了:

 def view_quote respond_to do |format| format.js { render :layout => false } end end 

并在view_quote.js.erb中:

 sym = $('.orders #order_symbol').val(); $('#quotes').html(""); 

并在_googlequote.html.erb中(我将把逻辑提取引用):

  

错误发生在view_quote.js.erb中,因为sym未定义。 如果我用第二行替换:

 $('#quotes').html(""); 

部分渲染,但我当然不需要它。 如何将javascript变量sym传递给部分_googlequote.html.erb? 否则,有没有更好的方法来实现我的目标?

你不能把它放在erb中,因为erb是在服务器上呈现的。 实现此目的的一种方法是使用符号作为view_quote的参数,因此您可以使用以下内容:

 $('#quotes').html("<%=j render 'googlequote', symbol: params[:sym] %>"); 

(当然,你可以更好地连接那个参数,但这是一个很好的起点)。

您正在Orders集合上发出GET请求。 这意味着所有这些。 如果要使用订单模型中的符号,请在成员上发出请求。

否则你可以将它作为参数传递(我认为你正在尝试做)。 如果你想在每次更改时将它传递给服务器,我建议使用jQuery change方法。 然后你可以发一个ajax请求:

 $.get('/orders', { sym: $('.orders #order_symbol').val() }, function(response) { $('#here').html(response); }); 

在控制器中:

 def view_quote @sym = params[:sym] # use @sym in rendering partial end 

谢谢@ ben-taitelbaum和@ajcodez,最后我使用了一种不同的方法,在这篇优秀文章的例子4和RyanonRails中的评论中提出。

以这种方式,在捕获符号字段改变事件之后,符号被传递到控制器,其中实现逻辑(从谷歌财务中刮取引用)。 结果再次传递给json格式的javascript以插入布局。