所以我试图在rails 3中做一个简单的ajax调用,但不能让ajax正确返回。我想我错过了一些明显的东西,但我已经试了三个小时了,所以我想是时候问了。
我正在尝试在应该返回搜索结果的帖子模型的索引页上的ajax调用。
我posts_controller。索引操作的Rb如下所示:
def index
@posts = Post.search(params[:search])
respond_to do |format|
format.html # index.html.erb
format.js #ajax call
format.json { render json: @posts }
end
end
我的index.html.erb(包含搜索文本字段和返回(ajax)结果的div)如下所示
<%= form_tag posts_path, :method => "get", :remote => true do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :class => "btn", :name => nil %>
<% end %>
<div id="posts">
<%= render @posts %>
</div>
我_post.html 。动词是这样的
<table>
<tr>
<td class="well well-small"><%= post.title %></td>
<td class="well"><%= post.content %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<br />
<br />
</table>
我的index.js.erb是这样的
$("#posts").html("<%= escape_javscript(render :partial => "new" ) %>");
和我的帖子。Rb模型页面如下图所示
class Post < ActiveRecord::Base
attr_accessible :content, :title
def self.search (search)
if search
find(:all, :conditions => ['title LIKE ?', "%#{search}%"])
else
find(:all)
end
end
end
对不起,有这么多的代码只是想显示所有相关的。由于某些原因,我的搜索结果没有使用ajax更新。当我从index.html.erb中的表单中删除:remote => true并删除index.js.erb文件时,搜索结果返回良好(没有ajax),因此我的搜索功能不是问题。
提前感谢你的帮助。如往常一样,如果你给我一个好的答案,我会接受它作为正确的。
问题是,你不是重新渲染你的新集合的帖子,你渲染'新'部分!
在你的index.js.erb文件上试试这个:
$("#posts").html("<%= j(render :collection => @posts ) %>");
不要更改你发布的任何其他内容,它应该可以工作
如果我理解你的问题,你的ajax请求后,你想更新你的视图:所以我会尝试这样的东西在你的posts_controller.rb:
format.js do
render :update do |page|
page.replace_html 'id_of_your_refreshed_element', :partial => 'partial_content_refreshed'
end
end
应该可以。您的partial_view将考虑您的新@posts变量。
我希望它能帮助你。