2010-04-09 80 views
12

Tôi muốn nhận một số thông số lồng nhau. Tôi có một Đơn đặt hàng có nhiều Mục và các Mục này đều có Loại. tôi muốn lấy tham số type_id từ phương thức tạo bộ điều khiển.Cách truy cập thông số lồng nhau

@order = Order.new(params[:order]) 
@order.items.each do |f| 
    f.item_type_id = Item_type.find_by_name(f.item_type_id).id 
end 

Lý do là tôi muốn người dùng có thể tạo item_types mới trong chế độ xem. Khi họ làm điều đó tôi sử dụng một cuộc gọi AJAX thêm chúng vào db. Khi họ đăng các hình thức tôi nhận được tên của các item_type trong tham số item_type_id và tôi muốn tìm item_type chính xác và thiết lập id đó

+1

Bạn nên cụ thể hơn. Bạn muốn lấy thông số này ở đâu? Trong bộ điều khiển trong cập nhật/tạo phương pháp? Hoặc xem trong hành động mới/chỉnh sửa? Thêm một số mã - nó luôn luôn làm cho nó dễ dàng hơn để đoán những gì bạn muốn :) – klew

+0

Có, cập nhật các câu hỏi một chút :) đã vội vàng khi tôi đăng nó – Flexo

Trả lời

26

Để truy cập vào các trường lồng nhau từ params làm như sau:

params[:order][:items_attributes].values.each do |item| 
    item[:type_id] 
end if params[:order] and params[:order][:items_attributes] 

Giải pháp trên sẽ chỉ hoạt động nếu bạn đã khai báo các liên kết chính xác và accepts_nested_attributes_for.

class Order < ActiveRecord::Base 
    has_many :items 
    accepts_nested_attributes_for :items, :allow_destroy => true 
end 

class Item < ActiveRecord::Base 
    belongs_to :order 
end 
+0

@KandadaBoggu! tình yêu tình yêu –

+0

Có vẻ như đó là những gì tôi cần. Tuy nhiên, tôi nhận được một phương thức undefined 'values ​​'cho nil: NilClass - error – Flexo

+0

Dường như' params' không có 'items_attributes'. In 'params' để kiểm tra giá trị. –

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