我构建了一个Rails应用程序,该应用程序允许用户根据Google图书api的搜索结果创建一个Book对象。我有一个控制器,使用GoogleBooks gem处理搜索api,并将结果显示在列表中。我正在努力想出一种方法,将书籍信息从单个搜索结果传递到Books控制器中的Create操作。从一个搜索结果块创建对象Ruby on Rails
我的搜索控制器从我的搜索表单中获取params并创建一个变量@results,我在'搜索'视图中调用该变量。这里是我的搜索控制器:
class SearchController < ApplicationController
def search
@results = GoogleBooks.search(params[:search])
end
end
我的看法是这样的:
<h1>Search Results</h1>
<% @results.each do |result| %>
<ul>
<li><%= result %></li>
<li><%= result.title %></li>
<li><%= result.authors %></li>
<li><%= result.isbn %></li>
<li><%= result.description %></li>
</ul>
<% end %>
说我有问题是,我不知道如何传递给我的书单个结果数据控制器的“创建”操作在数据库中生成一本新书。我不认为我可以将'result.title'或'result.author'传递给Book控制器,因为它们不是实例变量,也无法区分每个结果。
我的搜索结果页面源代码看起来像这样,如果有任何帮助的话。
<h1>Search Results</h1>
<ul>
<li>#<GoogleBooks::Item:0x007ff75d2bd138></li>
<li>Kansha: Celebrating Japan's Vegan and Vegetarian Traditions</li>
<li>Elizabeth Andoh</li>
<li>9781607743965</li>
<li>The celebration of Japan’s... </li>
</ul>
<ul>
<li>#<GoogleBooks::Item:0x007ff75d2bc148></li>
<li>Advanced Energy Saving and Its Applications in Industry</li>
<li>Kazuo. Matsuda, Yasuki. Kansha, Chihiro. Fushimi</li>
<li>9781447142072</li>
<li>The conventional approach for... </li>
</ul>
我想使用一个按钮来允许用户选择这本书,然后将本书的信息传递给创建操作。我在想我需要用button_to做这样的事情:
<%= button_to 'Create Book', book_path, :method => :post %>
但是,如何获取单个图书的数据到创建操作?
这里有很多事情要做 - 完整的解决方案需要花费太多时间进行勾画。但简单的答案是,我肯定会用ajax请求来做到这一点。将每个项目与一个按钮一起包装在一个div中,然后将ajax后置操作绑定到按钮点击。您将可以轻松获取相同父元素内的数据,以作为参数传递。 – gregates
@gregates感谢您的提示。我对rails比较陌生,但我会考虑实现一个AJAX post操作。 –