无法识别Rails URL参数

时间:2014-02-09 12:52:21

标签: javascript ruby-on-rails ruby-on-rails-4 url-parameters

在我的Rails应用中,我正试图通过其“URL /models/:id来查看模型。

我正在以两种不同的方式生成网址:在JavaScriptRails中,虽然它似乎是随机的,但控制器无法识别其“动作”中的id参数。

JavaScript中的第一种方式:

<a href='/conversations/" + conv_id + "'>" + conv_subject + "</a>

其中conv_id是我想访问的模型的ID。

当我使用Rails方式时会发生同样的错误:

<%= link_to "Conv" , conversation_path(22) %>

我只是手动输入对话的ID。

控制器操作如下所示:

def show
   gon.current_user_id = current_user.id
   gon.conversation_id = params[:id]
 end

我正在通过AJAX显示内容。在操作中有更多的代码处理。 但关键是控制器似乎无法识别params[:id]。 只有在我按F5后,/conversations/:id首次访​​问后,控制器才能识别出来。

提前致谢!

编辑:

虽然GON不会及时将其传递给javascript,但控制器会识别该ID

编辑:

问题可能在资产管道下面,因为我需要GON的所有脚本都放在管道中,只有在我按下{{1}后才重新加载正确的GON-Variables }}

编辑:

由于问题在于我的JavaScript,这是我迄今采用的方法。我试图通过函数参数外包Asset-Pipeline中使用的所有GON-Variables,这些参数传递给视图中的函数。

资产管道功能:<​​/ p>

F5

查看功能:

// Load n messages
function loadMessages(page, n, conv_id) {
    $.ajax({
        url: '/conversations/ajax/fetch_messages',
        data: 'n=' + n + '&page=' + page + '&id=' + conv_id,
        dataType: 'JSON',
        type: 'GET'
        ...
    });
}

修改

这是GON在rails说它不知道ID时给我的。这有点奇怪。

调试器告诉我的是什么:

<script>
    $(function() {
        // Load 10 Messages when the page is loaded for the first time
        loadMessages(1, 10, gon.conversation_id);
    });
</script>

检查员告诉我的事情:

//<![CDATA[
window.gon={};gon.current_user_id=3;gon.conversation_id=22;
//]]>

2 个答案:

答案 0 :(得分:1)

您的问题是您将裸体对象传递给link_to网址选项。 Rails需要URL helper:action / :controller个参数或纯网址

你最好使用这样的东西:

<%= link_to "Conv" , conversation_path(22) %>

答案 1 :(得分:0)

我一直在GON通过include_gon加入application.html.erb

单击链接时html并不令人耳目一新,因此不是GON-Variables。我只是按照这个答案: gon is not defined error in javascript。它表示将所有include_gon放在JS中需要它的视图中。