Ich versuche, Benutzer zu ermöglichen, Einstellungen von Standardeinstellungen mit einem Formular für ledermann-rails-settings zu aktualisieren. Ich habe das Formular basierend auf this answer erstellt, aber wenn ich versuche, das Formular zu senden, um Einstellungen zu aktualisieren, erhalte ich einen Routingfehler, der mit verschachtelten Ressourcen zu tun hat, aber ich bin neu in RoR, also bin ich mir nicht sicher. Andere Fragen dazu auf SO scheinen Rails 3 oder eine vorherige Version des Edelsteins zu verwenden. Ich benutze Schienen 4.2.1.Routing-Fehler für verschachtelte Ressource mit Ledermann-Rails-Einstellungen
routes.rb:
resources :users do
resources :settings
end
Rake Routen:
user_settings GET /users/:user_id/settings(.:format) settings#index
POST /users/:user_id/settings(.:format) settings#create
new_user_setting GET /users/:user_id/settings/new(.:format) settings#new
edit_user_setting GET /users/:user_id/settings/:id/edit(.:format) settings#edit
user_setting GET /users/:user_id/settings/:id(.:format) settings#show
PATCH /users/:user_id/settings/:id(.:format) settings#update
PUT /users/:user_id/settings/:id(.:format) settings#update
DELETE /users/:user_id/settings/:id(.:format) settings#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
die Form:
<%= form_for(:settings) do |form| %>
<h3>Dashboard settings</h3>
<%= form.fields_for :dashboard, current_user.settings(:dashboard) do |f| %>
<%= f.label :theme_light, 'Light (Default)' %>
<%= f.radio_button :theme, "themes/flatly" %>
<%= f.label :theme_dark, 'Dark' %>
<%= f.radio_button :theme, "themes/darkly" %>
<% end %>
<%= form.submit "Save" %>
<% end %>
SettingsController:
class SettingsController < ApplicationController
def update
if params[:settings]
params[:settings].each do |key, value|
current_user.settings(key.to_sym).update_attributes! value
end
flash[:success] = "Settings updated!"
redirect_to root_path
else
render 'edit'
end
end
end
User.rb:
has_settings do |s|
s.key :dashboard, :defaults => { :theme => 'themes/flatly' }
end
Absenden des Formulars jetzt als Service-Leistung gibt die folgende Routing-Fehler:
Started POST "https://stackoverflow.com/users/1/settings/1/edit" for 72.231.138.82 at 2016-07-01 15:12:36 +0000 ActionController::RoutingError (No route matches [POST] "https://stackoverflow.com/users/1/settings/1/edit")
Ich glaube, ich die Rails Guides verstehen für verschachtelte Ressource bildet, dass die erste bedeuten Zeile der Form sollte so etwas wie
<%= form_for([@user, @settings]) do |form| %>
aber geändert wird, gibt den Fehler
seinAußerdem scheint ledermann-rails-settings keine Methode zu haben, alle Einstellungen aufzurufen (zumindest soweit ich das bei der aktuellen Version des Gems sehen kann), also bin ich mir nicht sicher wie Ich würde sogar @settings definieren.
Ich habe versucht, verschiedene Pfade in das Formular ohne Glück, sowie versuchen Ressource: Einstellung und Ressourcen: Einstellungen in routes.rb. Ich habe das Gefühl, dass ich etwas auf der Controller- oder Routenebene verpasse, aber ich habe nicht genug Erfahrung, um zu wissen, wo und auf welchen Formularen die Edelsteindokumente und -probleme nicht viel zu finden sind.
mir viel geholfen. Vielen Dank! –