我想使用这样的路由:
resources :customers do
resources :electricity_counters, :shallow => true do
resources :electricity_bills, :shallow => true
end
end
创建power_counter工作正常,但编辑不能按预期工作.. 如果我访问electricity_counters / 1 / edit我只会得到空白字段,而我的所有数据都会丢失。
我的_form.html.erb就是这样开始的
<%= form_for([@customer, @customer.electricity_counters.build]) do |f| %>
和new和edit的控制器方法是这样的:
# 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
在调试中似乎是我的@customer变量设置不正确..但也许我只是愚蠢地使用那个aptana调试器;)
power_counter模型与客户的关联:
belongs_to :customer
那么我做错了什么?
答案 0 :(得分:16)
你的问题就在这一行。
<%= form_for([@customer, @customer.electricity_counters.build]) do |f| %>
无论你想做什么,它都会构建一个新的electricity_counter
。因为你正在控制器中处理它。
但是,由于你想对新的和编辑使用相同的_form
部分,你必须能够更改form path
。基本上我最终做了这样的事情:
控制器
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
表格
<%= form_for(@path) do |f| %>
此外,您的routes.rb
仍然关闭此更改
resources :customers, :shallow => true do
resources :electricity_counters, :shallow => true do
resources :electricity_bills
end
end