【问题标题】:Rails URL parameter not recognizedRails URL 参数无法识别
【发布时间】:2014-02-09 12:52:20
【问题描述】:

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

我以两种不同的方式生成 URL: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后,控制器才识别出来。

提前致谢!

编辑:

控制器会识别 id,尽管 GON 不会及时将其传递给 javascript

编辑:

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

编辑:

由于问题出在我的 JavaScript 中,这是我目前采用的方法。我尝试通过函数参数将 Asset-Pipeline 中使用的所有 GON-Variables 外包给视图中的函数。

资产管道功能:

// 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'
        ...
    });
}

查看功能:

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

编辑:

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

调试器告诉我什么:

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

检查员告诉我的:

//<![CDATA[
window.gon={};gon.load_n_feedbacks_path="/feedbacks/ajax/load_n_feedbacks";gon.user_id="3";
//]]>

【问题讨论】:

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


    【解决方案1】:

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

    你最好使用这样的东西:

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

    【讨论】:

    • 是的,谢谢。当我发布问题时,在那里犯了一个很大的错字^.^我会编辑我的问题
    • 感谢您的更新 - 您是否测试过 conversation_path 方式?我的意思是,您的路径实际上是否称为conversation_path?我只是以它为例
    • 使用路径方法或原始模型没有任何区别,tbh。 link_to 助手可以双向工作:-)
    • 好的,你的问题出在你的 javascript 链接上吗?
    • 是的,我已经尝试将资产管道中使用的所有 GON 变量外包给函数参数,我将其传递给我视图中的函数。我会发布一个例子
    【解决方案2】:

    我一直在我的application.html.erb 中包含GON 通过include_gon

    点击链接时 html 没有刷新,因此不是 GON 变量。我只是按照这个答案: gon is not defined error in javascript。它说把你所有的include_gons 放在他们的JS 需要它的视图中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2015-01-28
      • 1970-01-01
      • 2019-07-14
      • 2013-08-09
      • 2015-02-17
      • 1970-01-01
      相关资源
      最近更新 更多