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] "/wifi_settings/update"</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…