在阅读了一些经验之后,我觉得这个问题可能需要重新提起来。在Rails3中进行编码时,我试图在用户尝试在我的应用程序的另一个元素上创建帖子时实现一些流畅的Ajax效果。这是我关注的代码:
应用/视图/帖/ new.html.haml
- form_for @post, :remote=>true do |f|
= f.text_area :content
= submit_tag "Post"
应用/控制器/ post_controller.rb
def create
@comment = Post.new(params[:post])
@comment.save
end
应用/视图/帖/ create.js.erb:
alert("ajax worked!");
我按照我在UJS Railscast看到的内容,但似乎没有任何事情发生。不仅如此,萤火虫还没有给我任何关于正在发生的事情的描述性证据。它告诉我它在提交时创建了新的post对象,但没有进一步说明。
有什么想法吗?
答案 0 :(得分:10)
我找到了答案!问题是,当控制器渲染视图时,它包括我的应用程序的整体布局;布局正在屈服于渲染操作,因此我的.js.erb文件中包含的javascript代码被吐出到我的application.rhtml中。我通过在控制器操作中包含这个来显示我的帖子来解决这个问题:
respond_to do |format|
format.js {render :layout=>false}
end
答案 1 :(得分:0)
<%= form_tag products_path, :method => 'get', :id => ↵
"products_search" do %>
<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
和Js
// Search form.
$('#products_search').submit(function () {
$.get(this.action, $(this).serialize(), null, 'script');
return false;
});
});
答案 2 :(得分:0)
当我的布局在Haml(application.haml)中编码时,AJAX不会触发,并且提到的解决方法kelly.dunn不起作用。
respond_to do |format|
format.js {render :layout=>false}
end
最简单的解决方法是将应用程序布局转换为.html.erb格式。