Вложенные маршруты - рельсы 5.2.4 - Неопределенная локальная переменная или метод

Для регистрации адресов для клиентов в моем приложении я использую вложенные маршруты, однако при нажатии на ссылку для регистрации нового адреса или редактирования существующего адреса система выдает ошибку:

undefined локальная переменная или метод ʻaddress'для #<## Class: 0x00007fd1c815fa58>: 0x00007fd1d05ef598> Вы имели в виду? @ адрес.

Может ли кто-нибудь с добрым сердцем сообщить мне, где ошибка или чего не хватает, чего я еще не видел?

Вот код приложения:

routes.rb

resources :clients do
   resources :addresses
end

модели / адреса.rb

class Address < ApplicationRecord
  belongs_to :client
end

модели / clients.rb

class Client < ApplicationRecord
  has_many :addresses
end

контроллеры / address_controller.rb

class Backoffice::AddressesController < BackofficeController
  before_action :set_client
  before_action :set_address, only: [:edit, :update, :destroy]

  def new
    @address = @client.addresses.build
  end

  def create
    @address = @client.addresses.build(params_address)
    if @address.save
      redirect_to backoffice_addresses_path, notice: "Endereço cadastrado com sucesso!"
    else
      render :new
    end
  end

  def edit
  end

  def update
    if @address.update(params_address)
      redirect_to backoffice_client_addresses_path(@client), notice: "#{@client.name} alterado com sucesso!"
    else
      render :new
    end
  end


  private

    def set_client
      @client = Client.find(params[:client_id])
    end

    def set_address
      @address = @client.addresses.find(params[:id])
    end

    def params_address
      params.require(:address).permit(:nickname,
                                     :cep,
                                     :street,
                                     :number,
                                     :district,
                                     :city,
                                     :state,
                                     :client_id)
    end
end

просмотры / адреса /index.html.erb

<%= link_to new_backoffice_client_address_path(@client)" do %>
    Novo
<% end %>

<% @client.addresses.each do |address| %>
  <tr>
     <td><%= address.nickname %></td>
     <td> ... </td> 
     <%= link_to edit_backoffice_client_address_path(@client, address) do %>
         Editar
     <% end %>
<% end %>

просмотры / адреса / edit.html.erb

<%= render partial: "addresses/shared/form" %>

просмотры / адреса / общие /_form.html.erb

<%= form_with(model: [@client, address], local: true) do |f| %>
  ...
<% end %>

1 ответ

<%= form_with(model: @address, url: [@client, @address], local: true) do |f| %>
… 
<% end %>

Согласно документам, значения для url "похожи на значения, переданные в url_for или link_to", поэтому использование массива должно работать.

Это также работает с неглубоким вложением, поскольку массив уплотнен.

Другие вопросы по тегам