1

当用户单击图表时,我会ID在其onclick事件的 Javascript 端得到一些并将其作为查询参数传递给我要打开的页面,然后我说

window.open(go_to);

例如,其中goto将包含该查询参数"http://localhost:3000/myapp/people?provider=134"

所以现在它命中了indexRails 端的 action 方法,在那里我还获得了另一个用于登录用户的变量:

def index
  cur_user_id = current_user.id
  provider_id = params[:provider]

  # call the REST service and pass those two params
  # and get the appropriate JSON back from the service

  if provider_id == cur_user_id
    render nothing: true
  end
end

我遇到的问题是这个逻辑:

  if provider_id == cur_user_id
    render nothing: true
  end

因此,如果登录用户与提供者相同,我不想打开该页面或显示任何内容。 Render Nothing正在帮助不显示任何内容,但仍然window.open来自 Javascript 的部分代码正在打开页面,空白我怎么能告诉它,甚至不打开新页面?

4

1 回答 1

0

您可以将 ruby​​ 代码与 javascript 混合使用:

var provider_id = $('#provider_id').val();
var go_to = '/path/to/somewhere?provider_id=' + provider_id;
if(provider_id == <%= current_user.id %>) {
  alert('You cannot go there!');
} else {
  window.open(go_to);
}

请记住,ruby 代码将首先执行(在服务器端),然后生成您的 HTML/javascript,最后在客户端执行。因此<%= current_user.id %>,在 javascript 内部只会打印其中的值,就像它是在 JS 中硬编码的一样。


您似乎不了解 javascript 部分中的 ruby​​ 代码,举个例子,在您的一个视图中使用 Javascript 试试这个:

# this is on the server-side, it will be generated:
<script type="text/javascript">
  <%= "alert('hello Eric!');".html_safe %>
</script>

# on the client-side, you will receive this generated HTML content:
<script type="text/javascript">
  alert('hello Eric!');
</script>

对于 HAML:

:javascript
  #{"alert('hello Eric')".html_safe}
  var hello = '#{"hello World!"}';
  alert(hello);
于 2013-08-21T14:18:06.137 回答