Rails вложенная маршрутизация + неглубокое редактирование не работает - PullRequest
6 голосов
/ 06 февраля 2012

Я хотел бы использовать такую ​​маршрутизацию, как это:

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

Создание электрического_счетчика работает нормально, но редактирование не работает должным образом. Если я захожу на сайт Electric_counters / 1 / edit, я получаю только пустое значениеполя и все мои данные отсутствуют.

Мой _form.html.erb для этого начинается следующим образом

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

и методы контроллера для новых и редактирования выглядят так:

# 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;)

У модели electric_counter есть связьклиенту, установленному:

belongs_to :customer

Так что я делаю не так?

1 Ответ

16 голосов
/ 06 февраля 2012

Ваша проблема в этой строке.

<%= 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...