2012-02-06 9 views
5

Chciałbym użyć niektórych routing tak:Szyny zagnieżdżone routingu + płytkie zmieniać na nim nie pracuje

resources :customers do 
    resources :electricity_counters, :shallow => true do 
    resources :electricity_bills, :shallow => true 
    end 
end 

Tworzenie electricity_counter działa dobrze, ale edycja nie działa zgodnie z oczekiwaniami .. Gdybym odwiedzić electricity_counters/1/edycja Dostaję tylko puste pola i brakuje wszystkich moich danych.

Moja _form.html.erb na który rozpoczyna się ten

<%= form_for([@customer, @customer.electricity_counters.build]) do |f| %> 

i metod kontroler dla nowych i edycji są tak:

# GET customers/1/electricity_counters/new 
    def new 
    @customer = Customer.find(params[:customer_id]) 
    @electricity_counter = @customer.electricity_counters.build 
    end 

    # GET /electricity_counters/1/edit 
    def edit 
    @electricity_counter = ElectricityCounter.find(params[:id]) 
    @customer = @electricity_counter.customer 
    end 

W debugowania wydaje się, że moja @ zmienna klienta nie jest ustawiona poprawnie, ale może po prostu jestem głupia, aby użyć tego aptana debuggera;)

Model rachunku kosztów energii elektrycznej ma związek z klientem ustawionym przez:

belongs_to :customer 

Co więc robię źle?

Odpowiedz

16

Twoim problemem jest ta linia.

<%= form_for([@customer, @customer.electricity_counters.build]) do |f| %> 

Buduje nową electricity_counter bez względu na to, co chcesz robić. Ponieważ zajmujesz się tym w kontrolerze.

Ale ponieważ chcesz użyć tego samego elementu _form częściowego dla nowych i edycji, musisz mieć możliwość zmiany form path. Zasadniczo skończyło się robi coś takiego:

Controller

def new 
    @customer = Customer.find(params[:customer_id]) 
    @electricity_counter = @customer.electricity_counters.build 
    @path = [@customer, @electricity_counter] 
end 

def edit 
    @electricity_counter = ElectricityCounter.find(params[:id]) 
    @customer = @electricity_counter.customer 
    @path = @electricity_counter 
end 

Formularz

<%= form_for(@path) do |f| %> 

również swoją routes.rb jest wyłączony Zmień go na

resources :customers, :shallow => true do 
    resources :electricity_counters, :shallow => true do 
    resources :electricity_bills 
    end 
end 
+0

Thanks :) Ale wydaje się być innym błędem .. jeśli otworzę edycję, otrzymam: 'NoMet hodError in Electricity_counters # edit niezdefiniowana metoda 'customer_electricity_counter_path 'dla # <# : 0x10cb61590>' – kannix

+0

Twój zasób jest 'płytki', nie musisz przedmowywać' electricity_counter_path' z 'customer'. Ale myślę, że masz swoje 'routes.rb' do tyłu, będę edytować odpowiedź bardzo szybko. – Azolo

+0

Hmm I ustalony routes.rb i zmieniłem form_for wywołanie metody do '<% = form_for @electricity_counter zrobić | f | %> ' To rozwiązuje zmienił .. ale potem, że nowa trasa wydaje się być uszkodzony :( ' no mecze trasy {: format => nil: controller => "electricity_counters"} ' – kannix

Powiązane problemy