0

したがって、Rails 3 で単純な ajax 呼び出しを実行しようとしていますが、ajax を適切に返すことができません。明らかな何かが欠けていると思いますが、過去3時間試してきたので、質問する時が来たと思いました.

検索結果を返すはずの投稿モデルのインデックス ページで ajax 呼び出しを試みています。

index アクションの 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.erb は次のようになります

<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" ) %>");

私のpost.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 なしで) 正常に返されるため、検索機能に問題はありません。

よろしくお願いします。いつものように、あなたが私に良い答えをくれれば、それを正しいものとして受け入れます。

4

2 に答える 2

1

問題は、投稿の新しいコレクションを再レンダリングしているのではなく、「新しい」部分をレンダリングしていることです!

代わりに index.js.erb ファイルでこれを試してください:

$("#posts").html("<%= j(render :collection => @posts ) %>");

投稿したものから他に何も変更しないでください。動作するはずです。

于 2013-01-15T22:33:42.670 に答える
0

私があなたの問題を理解しているなら、あなたはあなたの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変数を考慮に入れます。

お役に立てば幸いです。

于 2013-01-15T20:37:12.257 に答える