2010-04-09 15 views
12

Chciałbym uzyskać niektóre zagnieżdżone parametry. Mam zlecenie, które ma wiele Przedmiotów i te Przedmioty mają Typ. Chciałbym uzyskać parametr type_id z metody tworzenia kontrolerów.Jak uzyskać dostęp do parametrów zagnieżdżonych

@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 

Powodem jest to, że chcę, aby użytkownik mógł tworzyć nowe item_types w widoku. Kiedy robią to używam połączenia AJAX dodaj je do bazy danych. Kiedy pisać postać otrzymuję imiona typu ITEM_TYPE w parametrze item_type_id i chcę, aby znaleźć odpowiednie ITEM_TYPE i ustawić identyfikator do tej

+1

Powinieneś być bardziej konkretny. Gdzie chcesz uzyskać ten parametr? W kontrolerze w metodzie aktualizacji/tworzenia? Lub w widoku w akcji nowej/edycji? Dodaj trochę kodu - zawsze łatwiej zgadnąć, co chcesz :) – klew

+0

Tam, zaktualizowałem pytanie trochę :) było pośpiesznie, kiedy opublikowałem to – Flexo

Odpowiedz

26

Aby uzyskać dostęp do zagnieżdżonych pól z params wykonaj następujące czynności:

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

Powyższe rozwiązanie zadziała WYŁĄCZNIE, jeśli zadeklarowano prawidłowe powiązania i 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! miłość miłość –

+0

Wygląda na to, że tego potrzebuję. Jednakże otrzymuję niezdefiniowaną metodę "values" dla nil: NilClass - error – Flexo

+0

Wygląda na to, że 'params' nie ma' items_attributes'. Wydrukuj 'params', aby sprawdzić wartość. –