【发布时间】:2014-02-09 12:52:20
【问题描述】:
在我的 Rails 应用程序中,我试图通过其“URL /models/:id”查看模型。
我以两种不同的方式生成 URL: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后,控制器才识别出来。
提前致谢!
编辑:
控制器会识别 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