Rails 3 アプリで Ajax 検索を理解しようとしています。この投稿は、Railscast から借用しています。現在、送信しても何も起こらず、Chrome コンソールにアクセスすると、次のエラーが表示されます。
GET http://localhost:3000/search?utf8=%E2%9C%93&search=&_=1361491523102 404 (Not Found)
posts.js の 5 行目は責任があるようですが、それは jQuery 呼び出しのように見えるので、何が間違っているのかわかりません。
私の関連コード:
posts.js.コーヒー
jQuery ->
# Ajax search on submit
$('.search_form').submit( ->
$.get(this.action, $(this).serialize(), null, 'script')
false
)
posts_controller.rb
def show
@search = Post.search(params[:search])
respond_to do |format|
format.html # show.html.erb
format.json { redirect_to @post }
end
end
def search
@search = Post.search(params[:search])
render json: { results: @search }
end
post.rb
def self.search(search)
if search
where('name LIKE ?', "%#{search}%")
else
scoped
end
end
show.html.erb
<%= form_tag search_path, method: "get", class: "search_form form-inline",
style: "display:inline-block;" do %>
<%= text_field_tag :search, params[:search], placeholder: "Search:", id: "search_field" %>
<%= submit_tag("Search", name: nil, class: "btn search", remote: true) %>
<% end %>
# Testing for @search stops it from pulling a "no method '.first' for nil NilClass" error.
<div id="list"><%= render partial: 'list', locals: { search: @search } if @search%></div>
list.html.erb
<ul>
<% @search.each do |p| %>
<li><a href=<%= p.id %> ><%= p.name %> <span class="manual_small">(<%= p.created_at.strftime("%b %d, %Y") %>)</span></a></li>
<% end %>
</ul>
ここで何がうまくいかないのですか?
編集 - ルートファイルの関連行を追加:
resources :posts
# ...
match '/search', to: 'posts#search'
私はすでにそこに「/search」ルートを持っていました。そうですか - その場合、問題は別の場所にありますか? コードの残りの部分はきれいに見えますか?
編集 -- ダミアンの報告によると、PostsController に検索メソッドを追加しました。新しい興味深い点は、a) パーシャルの呼び出し方法、新しい検索アクション、そして Post.rb の show メソッドの内容を "Post.all" に置き換えようとしたが、それでもうまくいかなかったという事実です。何でも見せます。ただし、エラーはスローされません。