Désolé, je l'ai regardé des questions similaires à cela, mais ne peut toujours pas comprendre pour une raison quelconque ...Rails 5 SimpleForm pas mettre à jour les attributs imbriqués
J'utilise et je Concevoir essayer de mettre à jour mon modèle d'utilisateur et un modèle de ville en même temps (à travers la page d'enregistrement des modifications) en utilisant un formulaire imbriqué.
Je mets à jour la ville des utilisateurs en fonction d'un ensemble de valeurs prédéfinies qui se trouvent dans la base de données. Tout ce que l'utilisateur a à faire est de sélectionner une ville dans laquelle il vit à partir d'une liste, puis de l'enregistrer.
Tout ce qui se passe en ce moment est le formulaire soumis mais la ville n'est pas modifiée.
Merci d'avance!
#user.rb
class User < ApplicationRecord
belongs_to :city
end
#city.rb
class City < ApplicationRecord
has_many :users
end
Mon contrôleur:
class UsersController < ApplicationController
def index
@users = User.all
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to @user
else
render 'edit'
end
end
def show
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(city_attributes: [:id, :name, :user_id])
end
end
Et ma forme:
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= f.simple_fields_for :city do |c| %>
<%= c.input :city_id, collection: City.all.order(name: :asc), label_method: :name, value_method: :id, label: "City", include_blank: false, selected: @user.city_id %>
<% end %>
<% end %>
Je suppose que cela ne fonctionne pas car le formulaire ne renvoie pas à votre users_controller. Vous devez remplacer le fichier 'routes.rb' d'une manière spécifique pour indiquer à Devise d'utiliser votre contrôleur. – Iceman
Merci @Iceman. J'ai posté ma réponse ci-dessous maintenant et mon problème est trié. Les attributs imbriqués ne fonctionnent toujours pas mais c'est quelque chose que je reviendrai à un autre moment. –
Je suis content que vous ayez réussi, peut-être que je me pencherai sur l'autre problème un jour. – Iceman