将rails params传递给链接的js文件

时间:2012-11-27 14:22:47

标签: javascript jquery ruby-on-rails scope

我有一个附加的js.erb文件的视图,我试图用它来自动链接到一些ajax内容。当代码包含在视图页面中时,我的代码正常工作:

<script>
$(document).ready(function(){ 
  //auto opening a phase
  <% if params[:phase] %>
    auto_phase = <%= params[:phase] %>;
    //open the specified phase
      var a_id = "phase_" + auto_phase;
      $('a#'+a_id).click();
  <% else %>
    //auto open first phase
      $('a.phase_status_0').first().click(); 
  <% end %>
})
</script>

但是当我将代码移动到通过以下链接的js.erb文件时:

<% content_for :javascript_includes do %>
  <%= javascript_include_tag "projects.js.erb" %>
<% end %>

我收到以下错误:

undefined local variable or method `params' for #<#<Class:0x299454c>:0x450185c>

是否有一种简单的方法可以让js.erb文件从视图的URL中访问params? (例如:www.site.com/projects/16?phase=18)

谢谢!

1 个答案:

答案 0 :(得分:1)

javascript_include_tag只允许您包含vanilla JavaScript文件。

您可能正在寻找的是将代码放入_projects.js.erb,然后将其渲染为部分代码:

<% render 'projects.js', :locals => { :project_phase => params[:phase] } %>

然后将params[:phase]替换为js.erb文件中的:project_phase

旁注:

这一行:

auto_phase = <%= params[:phase] %>;

缺少引号,因此在新文件中看起来像:

auto_phase = "<%= :project_phase %>";