2012-02-06 34 views
5

Tôi muốn sử dụng một số định tuyến như thế này:Rails lồng định tuyến + cạn chỉnh sửa không làm việc

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

Tạo một electricity_counter hoạt động tốt, nhưng chỉnh sửa không hoạt động như mong đợi .. Nếu tôi ghé thăm electricity_counters/1/chỉnh sửa Tôi chỉ nhận được các trường trống và tất cả dữ liệu của tôi bị thiếu.

_form.html.erb tôi cho rằng bắt đầu như thế này

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

và các phương pháp điều khiển cho mới và chỉnh sửa là như thế này:

# 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 

Trong debug nó dường như là @ của tôi biến khách hàng không được đặt đúng .. nhưng có thể tôi chỉ là ngu xuẩn khi sử dụng trình gỡ rối aptana đó;)

Mô hình điện_counter có liên kết với khách hàng do:

belongs_to :customer 

Vì vậy, tôi đang làm gì sai?

Trả lời

16

Vấn đề của bạn là dòng này.

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

Nó xây dựng mới electricity_counter bất kể bạn muốn làm gì. Vì bạn đang xử lý điều đó trong bộ điều khiển.

Nhưng vì bạn muốn sử dụng cùng một phần _form cho cả mới và chỉnh sửa, bạn phải có thể thay đổi form path. Về cơ bản tôi đã kết thúc làm một cái gì đó như thế này:

khiển

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 

Mẫu

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

Ngoài ra bạn routes.rb tắt thay đổi nó để này

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

Cảm ơn :) Nhưng có có vẻ là một lỗi khác .. nếu tôi mở chỉnh sửa tôi nhận được: 'NoMet hodError in Electricity_counters # edit phương thức undefined 'customer_electricity_counter_path 'cho # <# : 0x10cb61590>' – kannix

+0

Tài nguyên của bạn là 'cạn' bạn không cần phải bắt đầu' điện_counter_path' với 'khách hàng'. Nhưng tôi cũng nghĩ rằng bạn có 'routes.rb' ngược lại, tôi sẽ chỉnh sửa câu trả lời của tôi thật nhanh. – Azolo

+0

Hmm Tôi đã sửa route.rb và đổi phương thức form_for thành '<% = form_for @electricity_counter do | f | %> ' Đó ấn định chỉnh sửa .. nhưng sau đó con đường mới dường như bị phá vỡ :( ' Không trận tuyến đường {: format => nil,: controller => "electricity_counters"} ' – kannix

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