【发布时间】:2014-01-23 00:06:46
【问题描述】:
我有一个Article 模型和一个articles 控制器。index 操作:
def index
@article=Article.find(id: params[:id])
respond_to do |format|
format.html
format.js
end
end
index.html.erb
<a href="" id="find">Find Article</a>
<div id="article">
<%= render @article %>
</div>
$('#find').click(function(){
$.ajax({
type: "PUT",
data: {id: id},
url: "/index"
});
});
index.js.erb
$('#article').update("<%=escape_javascript(render(@article))%>");
_article.html.erb
<p><%= @article.name %></p>
routes.rb
get '/index', to: "articles#index"
put '/index', to: "articles#index"
但是部分中没有显示任何内容。 p 标签为空。日志中没有错误。
假设没有记录与查询匹配,那么它应该给出nil 错误。
另外在 heroku 上,当我转到 index 页面时,它会抛出错误(在本地一切正常)
ActionView::Template::Error(nil:NilClass 的未定义方法“名称”):
那么这里发生了什么? Rails 中的 ajax 是如何工作的?我可以从上述错误中得到的是,当调用index 操作时(当我访问它时)它会尝试检测@article 变量,即nil,同时它呈现_article.html.erb部分太。肯定@article第一次为零。只有在我单击链接并发出ajax请求后才会进行查询。rails如何知道这是一个ajax请求?
我做错了什么?
感谢您的帮助。
更新
现在,尝试了一些东西,即使我没有在 index.js.erb 中添加任何内容,@articles 变量也会在控制台中正确呈现。
【问题讨论】:
-
您的点击功能没有正常关闭。
-
@hawk 这是一个错字。 :)
标签: ruby-on-rails ajax heroku