我想知道如何从与rails上的ruby关联的mysql数据库中检索信息。当用户从选择框中选择产品时,我想使用所选选项的值从数据库中检索产品的描述和价格,然后将其显示在div中。使用以下代码:
<select>
<option value='1'>milk</option>
<option value='2'>eggs</option>
<option value='3'>butter</option>
</select>
<div id='product_description'></div>
<div id='product_price'></div>
例如,当用户选择鸡蛋时,第一个div会显示:'chicken babies',第二个div会显示:'$ 2.00'。
我的选择标记也会从数据库填充,如果知道这一点很重要。
填充选择的代码:
<select>
<option>Select Add-on</option>
<% for product in @products %>
<option value="<%= product.id %>"><%= product.item %></option>
<% end %>
</select>
我也在使用jquery。
我想我基本上想知道我是否应该使用ajax调用,或者是否有一些魔术轨道方式来完成任务。如果我需要使用ajax,我可以从js.coffee文件中完成所有操作吗?我无法弄清楚如何将选定的选项值传递给另一个文件,以从products表中选择正确的行。
答案 0 :(得分:1)
您应该使用options_for_select
生成选项:
http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/
<%= options_for_select([["Dollar", "$"], ["Kroner", "DKK"]]) %>
#generates
<option value="$">Dollar</option>
<option value="DKK">Kroner</option>
结合select_tag
生成选择:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-select_tag
<% options = "<option>Red</option><option>Green</option><option>Blue</option>".html_safe %>
<%= select_tag "colors", options %>
<div id="product_details"></div>
#generates
<select id="colors" multiple="multiple" name="colors[]">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</select>
<div id="product_details"></div>
在您的情况下:
<% options = options_for_select(@products.map{ |product| [product.item, product.id] }) %>
<%= select_tag('product_search', options) %>
# jQuery
$('#product_search').bind('Click', function(e) {
var selected_product_id = $(this).val();
# Then call the Ajax
$.ajax({url: '/products/details/' + selected_product_id, # URL to contact
type: 'GET',
success: function(data) {
$('#product_details').empty().append(data);
}
});
});
'/products/details/:id'
发送请求,其中:id
代表产品的ID(ProductsController#details
)。现在,您必须对服务器端进行编码以处理请求,生成HTML(或使用JSON响应,在客户端更快但更重)以及发送响应。