0
Hi, I’m having trouble editar a record:
Follows View
_form.html.erb
<%= form_with(model: cliente, local: true) do |form| %>
  <% if cliente.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(cliente.errors.count, "error") %> prohibited this cliente from being saved:</h2>
      <ul>
      <% cliente.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>
  <div class="field">
    <%= form.label :cnpj %>
    <%= form.text_field :cnpj, id: :cliente_cnpj %>
  </div>
  <div class="field">
    <%= form.label :razao_social %>
    <%= form.text_field :razao_social, id: :cliente_razao_social %>
  </div>
  <div class="field">
    <%= form.label :num_funcionarios %>
    <%= form.number_field :num_funcionarios, id: :cliente_num_funcionarios %>
  </div>
  <div class="field">
    <%= form.label :processo_id %>
    <%= collection_select(:cliente, :processo_id, @processo_options_for_select, :id, :descricao) %>
  </div>
  <div class="field">
    <%= form.label :status %>
    <%= form.number_field :status, id: :cliente_status, value: '1', :readonly => true%>
  </div>
  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>
Follows Controller
clientes_controller.erb
class ClientesController < ApplicationController
  before_action :set_cliente, only: %i[show edit update destroy]
  # GET /clientes
  # GET /clientes.json
  def index
    @clientes = Cliente.all
  end
  # GET /clientes/1
  # GET /clientes/1.json
  def show; end
  # GET /clientes/new
  def new
    @cliente = Cliente.new
    options_for_select
  end
  # GET /clientes/1/edit
  def edit; end
  # POST /clientes
  # POST /clientes.json
  def create
    @cliente = Cliente.new(cliente_params)
    respond_to do |format|
      if @cliente.save
        format.html { redirect_to @cliente, notice: 'Cliente foi Criado com Sucesso.' }
        format.json { render :show, status: :created, location: @cliente }
      else
        format.html { render :new }
        format.json { render json: @cliente.errors, status: :unprocessable_entity }
      end
    end
  end
  # PATCH/PUT /clientes/1
  # PATCH/PUT /clientes/1.json
  def update
    respond_to do |format|
      if @cliente.update(cliente_params)
        format.html { redirect_to @cliente, notice: 'Cliente foi Atualizado com Sucesso.' }
        format.json { render :show, status: :ok, location: @cliente }
      else
        format.html { render :edit }
        format.json { render json: @cliente.errors, status: :unprocessable_entity }
      end
    end
  end
  # DELETE /clientes/1
  # DELETE /clientes/1.json
  def destroy
    destroyReg
    respond_to do |format|
      format.html { redirect_to clientes_url, notice: 'Cliente foi apagado do sistema' }
      format.json { head :no_content }
    end
  end
  private
  def options_for_select
    @processo_options_for_select = Processo.where(status: 1)
  end
  # Use callbacks to share common setup or constraints between actions.
  def set_cliente
    @cliente = Cliente.find(params[:id])
  end
  # Never trust parameters from the scary internet, only allow the white list through.
  def cliente_params
    params.require(:cliente).permit(:cnpj, :razao_social, :num_funcionarios, :processo_id, :status)
  end
  def destroyReg
    conn = ActiveRecord::Base.connection
    if conn.execute("UPDATE Clientes SET status = 0 WHERE ID = #{@cliente.id}")
      puts"Apagado"
    else
      puts"Não Apagou"
    end
  end
end
Follows Exit
Started GET "/clientes" for 127.0.0.1 at 2018-03-28 16:52:19 -0300
Processing by ClientesController#index as HTML
  Rendering clientes/index.html.erb within layouts/application
  Cliente Load (0.4ms)  SELECT "clientes".* FROM "clientes"
  Processo Load (0.3ms)  SELECT  "processos".* FROM "processos" WHERE "processos"."id" = ? LIMIT ?  [["id", 4], ["LIMIT", 1]]
  Rendered clientes/index.html.erb within layouts/application (9.4ms)
Completed 200 OK in 113ms (Views: 109.4ms | ActiveRecord: 0.7ms)
Started GET "/clientes/18/edit" for 127.0.0.1 at 2018-03-28 16:52:23 -0300
Processing by ClientesController#edit as HTML
  Parameters: {"id"=>"18"}
  Cliente Load (0.2ms)  SELECT  "clientes".* FROM "clientes" WHERE "clientes"."id" = ? LIMIT ?  [["id", 18], ["LIMIT", 1]]
  Rendering clientes/edit.html.erb within layouts/application
  Rendered clientes/_form.html.erb (10.2ms)
  Rendered clientes/edit.html.erb within layouts/application (12.4ms)
Completed 500 Internal Server Error in 20ms (ActiveRecord: 0.2ms)
ActionView::Template::Error (undefined method `map' for nil:NilClass):
    28: 
    29:   <div class="field">
    30:     <%= form.label :processo_id %>
    31:     <%= collection_select(:cliente, :processo_id, @processo_options_for_select, :id, :descricao) %>
    32:   </div>
    33: 
    34:   <div class="field">
app/views/clientes/_form.html.erb:31:in `block in _app_views_clientes__form_html_erb___2257324227783179598_69886199691100'
app/views/clientes/_form.html.erb:1:in `_app_views_clientes__form_html_erb___2257324227783179598_69886199691100'
app/views/clientes/edit.html.erb:3:in `_app_views_clientes_edit_html_erb__1150078820149850562_69886199750960'
On the page, he accuses as if the error was on line 31 of View
<%= collection_select(:cliente, :processo_id, @processo_options_for_select, :id, :descricao) %>
The point is that to enter a contact, this same error does not happen. There is a method in the controller:
def options_for_select
     @processo_options_for_select = Processo.where(status: 1)
end
That passes the parameter, but I could only make it using the function where, for being a business rule (I know that this should be in the model, I will pass for lé in the future).
If anyone can give me a light! D