在我的Rails应用中,我正试图通过其“URL /models/:id
来查看模型。
我正在以两种不同的方式生成网址:在JavaScript
和Rails
中,虽然它似乎是随机的,但控制器无法识别其“动作”中的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;
//]]>
答案 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
中需要它的视图中。