2012-04-20 36 views
6

Tôi đã sử dụng mẫu mã lồng nhau Ryan đang hoạt động tốt, nhưng
tôi có hai kiểu i, e storage và order cả hai đều có mẫu lồng nhau.Mẫu lồng nhau động khi thay đổi hộp chọn

Bảo quản:

has_many :orders 
has_many :items, :dependent => :destroy 
accepts_nested_attributes_for :items 

thứ tự:

belongs_to:storage   
has_many :items, :dependent => :destroy 
accepts_nested_attributes_for :items 

Theo quan điểm để có lưu trữ chọn hộp,

<%= f.select :storage_id, 
      Storage.all.map{|s| [s.store_no, s.id]} %> 

On chọn số lưu trữ các mặt hàng tương ứng nên xuất hiện ở dạng đơn đặt hàng với một phần
bất kỳ cơ thể nào có thể cho tôi biết cách tốt nhất để làm.

Xin cảm ơn,

Trả lời

7

Trước tiên, bạn cần xem trường nhập đó để thay đổi. Vì vậy, giả sử:

  1. chọn lưu trữ có id là 'lưu trữ'
  2. chọn lưu trữ có id của 'lưu trữ' như giá trị của nó

... bạn có thể đặt này trong storage.coffee.js tập tin của bạn:

jQuery -> 
    $('select#storage').change -> 
    storage_id = $('option:selected',this).val() 
    $.get 'storages/' +storage_id+ '/orders.js' 

Sau đó, giả định rằng Đơn đặt hàng được gom lại dưới lưu trữ, nếu OrdersController của bạn trông giống như vậy:

OrdersController < ApplicationController 

    def index 
    @storage = Storage.find(params[:storage_id]) 
    @orders = @storage.orders 
    end 

end 

... và nếu bạn có một phần app/views/orders/_order.html.erb ...

... và nếu bạn có một div#orders trên trang của bạn mà bạn muốn lệnh rơi vào ...

.. sau đó, bạn sẽ có thể tạo một file app/views/orders/index.js.erb như vậy:

$('div#orders').html('<%= escape_javascript(render @orders) %>'); 

này nên làm cho một bản sao của một phần cho mỗi trường hợp các đơn hàng mà thuộc về một lưu trữ nhất định và gắn nó vào dom sau bộ chọn lưu trữ.

Điều đang xảy ra là: khi menu chọn được thay đổi, nó sẽ kích hoạt một yêu cầu GET đến chỉ mục đơn đặt hàng cho bộ nhớ đã cho. Sau đó, yêu cầu đó sẽ tự động cố gắng để phục vụ lên một trang index.js, với các biến cá thể được đặt trong bộ điều khiển có sẵn cho khung nhìn đó. Các js trong khung nhìn đó sẽ thực thi sau khi bất kỳ ruby ​​nội suy nào được chèn vào, vì vậy bạn có thể sử dụng các hàm đường ray (như render @orders) và sau đó đầu ra của những cái được đưa vào dom thông qua $('div#orders').html('your rendered orders will be inserted in here by rails').

Rõ ràng bạn sẽ phải tinh chỉnh điều này để phù hợp với trang của mình, tôi chỉ đoán được yếu tố nào của trang của bạn được gọi là v.v., nhưng khái niệm cơ bản này sẽ hoạt động tốt. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi.

+0

Cảm ơn câu trả lời của bạn tôi đã sử dụng đường ray 2.3.5 và nguyên mẫu và tuân theo khái niệm. –

Các vấn đề liên quan