Namieszałem coś z routes czy w contrellerze

Hej,

Coś namieszałem i zgłupiałem. Potrzebuję formularz do zmiany pewnych wartości, których nie mam w ActionRecord. Zrobiłem więc model (+validacja w modelu, której nie wklejam):

class WifiSettings < Struct.new(:ssid, :wpa2, :channel, :device_id)
  include ActiveModel::Model
  
  def self.from_hash(hash)
    obj = self.new
    hash.each {|key,value| obj.send("#{key}=", value)}
    obj
  end
  
end

Formularz ma pozwalać tylko na zmianę wczytanych z obcego źródła danych. Zatem dwie akcje: get edit i post update

w routes.rb mam:

  resource :wifi_settings, only: [:edit, :update]
  post 'wifi_settings/update'

wifi_settings_conteroller.rb:

class WifiSettingsController < ApplicationController
  
  def edit
    @device = Customer.find_by(id: session[:customer]).terminal_devices.find_by(device_id: wifi_params[:terminal_device_id])
    redirect_to root_path and return false unless @device
    @wifi_settings = WifiSettings.from_hash(ssid: @device.ssid, wpa2: @device.wpa2, channel: @device.channel, device_id: @device.device_id)
  end
  
  def update
    @wifi_settings = WifiSettings.from_hash(update_params)
    respond_to do |format|
      if @wifi_settings.valid?
        format.html { redirect_to '/welcome' }
      else
        format.html { render :edit }
      end
    end
  end
  
  private
  
  def wifi_params
    params.permit(:terminal_device_id)
  end
  
  def update_params
    params.require(:wifi_settings).permit(:ssid, :wpa2, :channel, :device_id)
  end
  
end

i do tego formularz:

<%= simple_form_for(@wifi_settings, url: '/wifi_settings/update', html: { class: "form-horizontal", role: "form" }, defaults: {required: false, label: false } ) do |f| %>

Jeżeli wpiszę w jakieś pole coś co nie przechodzi walidacji to ok, dostaję komunikat, pole sobie odświetlam… ale… w pasku url widzę: wifi_settingd/update a w źródłach strony cała masę śmieci łącznie z błędami routingu…

Tak jakby oprócz render :edit - wywalało mi źródła strony z błędami + js + css…

<header>
  <h1>Routing Error</h1>
</header>
<div id="container">
  <h2>No route matches [GET] &quot;/wifi_settings/update&quot;</h2>
...
...

Co namieszałem?

EDIT: ok, bo jak próbuję zobaczyć źródła strony to robi mi GET wifi_settings/update - prawidłowo… Zatem jak się pozbyć z URL’a tego wifi_settings/update…

Usuń z routes post 'wifi_settings/update' bo masz go już linijkę wyżej.

Tak, masz rację. To powinien być put a nie post. Obszedłem trochę problem, dodałem akcję :show - form na ‘/wifi_settings’ method ‘put’ i pustą templatkę show.html.erb - teraz po zajrzeniu w źródła przy wyświetlanych błędach lokalizacji renderuje po prostu pusty show - takie zachowanie mnie w sumie satysfakcjonuje.