Ruby on rails根据选项值获取mysql信息

时间:2013-06-07 16:28:52

标签: jquery mysql ruby-on-rails ajax

我想知道如何从与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表中选择正确的行。

1 个答案:

答案 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响应,在客户端更快但更重)以及发送响应。