将变量从Rails传递到js.erb文件

时间:2013-06-22 17:50:30

标签: javascript ruby-on-rails ajax

这是我边栏的代码。当用户单击其中一个链接时,会调用js.erb文件,但我不知道如何使js.erb文件能够区分用户单击的链接。我的想法是使用id,所以基本上将实例变量传递给js.erb文件。这就是我认为可以做到的,但我完全不确定。

<li>
    <%= link_to 'User Details', '/dashboard', :id => 'User Details', remote: true %>
</li>
<li>
    <%= link_to 'Projects', '/dashboard', :id => 'Projects', remote: true %>
</li>

使用此代码运行的js.erb文件:

<% if :id == 'User Details' %>
    $('#ajax').html("<%= escape_javascript(render :partial => 'users/edit', :locals => { :user => @user } ) %>");
<% elsif :id == 'Projects' %>
    $('#ajax').html("<%= escape_javascript(render :partial => 'projects/index', :locals => { :projects => @projects } ) %>");
<% end %>

我做错了什么或者我应该如何将某种标志或ID传递给js.erb文件以便我能够显示正确的信息?

1 个答案:

答案 0 :(得分:1)

我不确定您是否了解网站的运作方式。 Ruby是一种服务器端语言,它被执行并且html + js被发送到Web浏览器。 JS文件(在大多数情况下)在资产编译/首次运行时只执行一次,并且永远不会再次更新 因此,没有办法在运行时从js引用js中的Ruby代码。 您还在id属性中使用了非法字符,请参阅What characters are allowed in DOM IDs?

回到ruby / js的事情。

您可能想要通过ajax请求部分,传递id属性

$('#ajax').load('<%= here_put_helper_method_to_some_path %>');

然后在ProjectsController #index中呈现你想要的东西(例如基于当前用户)。

另外 - 一个好的规则是首先让a没有ajax然后添加ajax调用。