ユーザーが本のタイトルを入力するために使用するフォームがあり、それを外部の本の検索 API に渡します。次に、ページをリロードせずに本の結果をすぐ下に表示したいと考えています。
new.html.haml
(タイトル入力フォーム)
= form_tag book_search_path, :method => :get, :remote => true do
= label_tag "Title: (#{@title})"
= text_field_tag "title", ""
= submit_tag "Search!"
#results // results should be updated here
books_controller.rb
(book_search_path はここに、「検索」アクションに移動します)
class BooksController < ApplicationController
def index
@books = Book.find :all
render :action => 'list'
end
def new
@books = Book.find :all
end
def search
Rails.logger.info("DOSEARCH!!!")
# HIT THE API
@results = search_keywords params[:title]
# implicit render search.js.erb
end
search.js.erb
(books#search アクションの最後にレンダリングされます)
m = $('#results');
m.innerHTML = "<%= escape_javascript(render :partial => 'results.html.haml') %>";
_results.html.haml
(これは、ajax を介して結果 div に挿入したいものです)
- @results.each do |b|
%tr
%td
- Rails.logger.info("Got title...#{b.title}")
= b.title
%td
= b.isbn
_results.html.haml
「Got title」ログが表示されるので、それが実行されていることはわかっていますが、 results
div 内の new.html.haml には表示されません。何が起こっているのか分かりますか?
編集: books_controller を更新しました。完全なコードで。Book.rb は :attr_accessible フィールドを除いて空のモデルです
編集: Ajax 応答:
m = $('#results');
m.innerHTML = "<table id=\'results_table\'>\n <tbody><\/tbody>\n <th>Title<\/th>\n <th>ISBN<\/th>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n \n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey of Homer\n <\/td>\n <td>\n 1604240687\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n 1613821166\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey of Homer\n <\/td>\n <td>\n 1437818080\n <\/td>\n <\/tr>\n <tr>\n <td>\n Odyssey\n <\/td>\n <td>\n 0872204847\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey (Penguin Classics)\n <\/td>\n <td>\n 0143039954\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey: The Fitzgerald Translation\n <\/td>\n <td>\n 0374525749\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n 1613823398\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n 0763642681\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey (Penguin Classics)\n <\/td>\n <td>\n 0140449116\n <\/td>\n <\/tr>\n<\/table>\n";
編集: これは Rails 3.2.8 です