Question

Essayer de réécrire mon contrôleur de profil qui est cassé à ce stade. Im utilise amicy_id pour avoir des URL comme ci-dessous avec partiels edit_basics.haml, edit_details.haml, etc.

  • / Utilisateurs / ME / Edit / Basics
  • / utilisateurs / moi / modifier / intérêts
  • / utilisateurs / moi / modifier / détails

Le problème consiste à mettre à jour mon profil et à rediriger vers le chemin correct après la mise à jour. J'ai cherché et essayé plusieurs choses en vain jusqu'à présent.

  • Après soumettre le formulaire de modification, il redirige vers / Profils / moi
  • Après la mise à jour / les utilisateurs / moi / modifier / les bases, il devrait revenir à cet emplacement, la mise à jour lance une erreur dans

    Méthode non définie `Update_attributes 'pour # <#: 0x007f876e77d768>

    ? "}," commit "=>" sauver "," id "=>" myusername "}

    Bien sûr, je ne peux pas être le nom d'utilisateur

Itinéraires

  match '/users/:username' => "profiles#show"
  match '/users/:username/edit/:what' => "profiles#edit", :as => :edit_user

Mettre à jour l'action:

  def update

    @profile = Profile.where(params[:id])

    respond_to do |format|
      if @profile.update_attributes(params[:profile])
        format.html { redirect_to @profile, :action => "edit", :what => @profile.form,  notice: 'Profile was correctly updated.' }
      else
        format.html { @profile, :action => "edit", :what => @profile.form }
      end
    end
  end

Modifier l'action:

def edit

@profile = Profile.find(params[:username])
what = params[:what]

if not what.nil?
  if ["basics", "location", "details", "photos", "interests"].member?(what)
    render :action => "edit_#{what}"
  else
    render :action => "edit_basics"
  end
end

fin

Mise à jour: il semble que l'attribut ID contient toujours le nom d'utilisateur de l'utilisateur et ne peut donc pas mettre à jour

Était-ce utile?

La solution

Essayez de mettre à jour cette ligne:

@profile = Profile.where(params[:id])

Dans votre contrôleur à cela et voir si cela aide:

@profile = Profile.where({ :id => params[:id] }).first

Cela renverra l'instance du profil, pas les critères.

J'espère que cela aide.

Emil

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top