динамический выбор с рельсами и jquery

У меня есть приложение корзины, где вы выбираете товары из каталога. Я хочу динамически заполнить несколько столбцов, таких как доступные цвета, на основе выбора, все через ajax.

Это мое мнение, когда вы добавляете новый элемент

<td><%= f.collection_select(:product_id, Product.active.all, :id, :name, :prompt => 'Select Product') %></td>
<td><%= f.text_field :quantity, :size => 6 %></td>
<td><%= f.collection_select(:color_id, Color.all, :id, :name, :prompt => 'Select Color') %></td>
<td><%= f.text_field :price, :size => 8 %></td>
<td><%= f.link_to_remove "remove" %></td>

Я хочу установить параметры цены и цвета на основе значения product_id. вот что у меня есть до сих пор:

$('select#order_items_new').change(function() {
    // How to retrieve table columns based on product_id value?
});

person Gaelle    schedule 12.10.2011    source источник


Ответы (1)


Я надеюсь, что правильно понял вашу задачу. как только продукт выбран, выбор цвета будет отображаться через ajax вместе с ценой.

вот выбор продукта.

<%= form_tag "some_form" do |f|  %>
  Choose a product:
  <%= select_tag "product_id", options_for_select( @products.collect { |p| [p.name, p.id]} ), :include_blank => true  %>
  <br>
  <div id="colors_select"></div>
<% end %>

когда выбор продукта изменяется, ajax срабатывает и извлекает цвета и цену продуктов.

$(document).ready(function() {
  $("#product_id").live("change", function() {
    $.ajax({
      url: '/get_colors',
      data: {
        product_id: $(this).val();
      },
      cache: false,
      success: function(html) {
        $("#colors_select").html(html);
      }
    });
  });
});

не забудьте указать маршрут к методу, который возвращает цвета.

App::Application.routes.draw do
  match 'get_colors' => 'colors#get_colors'

простой метод, который возвращает партиал с цветами и ценой. как только ваши ассоциации настроены, вы можете получить цвета определенного продукта с помощью: Product.find(params[:product_id]).colors

class ColorsController < ApplicationController

  def get_colors
    @colors = Color.all
    @price = Product.find(params[:product_id]).price
    render :partial => 'get_colors'
  end
person Sean M    schedule 23.09.2012