Passer des paramètres à mettre à jour imbriquée attributs
Je suis en train de travailler sur une base très pratique, l'application où l'utilisateur peut créer plusieurs citations. Le problème que je rencontre est que je ne peux pas mettre à jour mes citations. J'ai beaucoup de choses et avoir lu d'autres questions ici et sur google, mais ne peut pas comprendre ce que je fais de mal. Voici mon code:
#User Model
class User < ActiveRecord::Base
has_many :quotations, :dependent => :destroy
attr_accessible :quotations
accepts_nested_attributes_for :quotations, :allow_destroy => true
end
#Quotations Model
class Quotation < ActiveRecord::Base
attr_accessible :quote_text, :author, :quote_type, :category, :tags, :user_id
belongs_to :user
end
Offres Contrôleur De
class QuotationsController < ApplicationController
before_filter :get_user
def get_user
@user = User.find(params[:user_id])
end
def edit
@quotation = @user.quotations.find(params[:id])
end
def update
@quotation = @user.quotations.find(params[:id])
if @quotation.update_attributes(params[:id])
redirect_to user_quotation_path :notice => "Successfully updated quotation."
else
render :action => 'edit'
end
end
end
Résolu si @citation.update_attributes(params[:id]) n'Est que la mise à jour de l'id, ce qui signifie que rien n'a changé, parce que l'id n'est pas dans le formulaire d'édition. Le bon code serait passer params[:citation] pour mettre à jour le qoutation paramètres. si @citation.update_attributes(params[:citation])
OriginalL'auteur Edward Castaño | 2011-11-09
Vous devez vous connecter pour publier un commentaire.
Vous êtes de passage le mauvais params hachage dans le update_attributes appel. Il devrait être
if @quotation.update_attributes(params[:quotation])
.De préciser, en passant
:id
ou:quotation
n'est pas de faire quelque chose de spécial. Les symboles en Ruby sont juste immuable de la chaîne. Donc, en utilisant:id
ou:quotation
est l'équivalent du passage d'une chaîne "id" ou "devis".params[]
est une table de hachage de tous les paramètres du formulaire affiché par votre page.Dans les params de hachage, il est une clé du type de passage (dans ce cas
quotation
) qui a une valeur d'un autre de hachage contenant l'ensemble des champs associés à l'offre de votre point de vue et les valeurs de ces champs.L'ID, le contrôleur et l'action des valeurs dans les paramètres de hachage vient de la route des valeurs à partir de l'url.
E. g.
OriginalL'auteur dnatoli
Ok, un grand développeur rails je sais m'ont aidé à cerner le problème. Pour préciser mon commentaire (depuis Stackoverflow ne me permet pas de poster une réponse dans les 12 heures de la création des questions):
tire la citation que je veux modifier. Alors:
Est seulement la mise à jour de l'id, ce qui signifie que rien n'a changé, parce que l'id n'est pas dans le formulaire d'édition.
Le bon code serait passer params[:citation] pour mettre à jour le qoutation paramètres.
Met uniquement à jour les paramètres pour la citation, je suis actuellement en train de modifier.
:quotation
n'est pas un symbole pour les paramètres de la citation, c'est simplement une chaîne de caractères. J'ai mis à jour ma réponse à vous donner une meilleure idée de ce qui se passe..Merci pour la clarification. J'ai mis à jour ma réponse pour refléter votre point et marqué vos réponse que l'on a accepté la réponse. Merci de prendre le temps d'élaborer les détails de passer des paramètres. C'est l'explication la plus claire que j'ai encore à voir. D'une grande aide!
Votre explication ci-dessus à propos de la transmission de paramètres, c'est sur, sauf que :citation est un symbole. Ne sais pas si nous en sommes seulement à mâcher mes mots. stackoverflow.com/questions/6428318/... troubleshooters.com/codecorn/ruby/symbols.htm
Désolé, mon explication n'était pas très clair. Oui :la citation est un symbole. Mais un symbole en ruby, c'est simplement un immuable de la chaîne. J'ai mis à jour ma réponse avec un lien qui devrait vous donner une bonne idée des différences entre la chaîne et les symboles en ruby.
OriginalL'auteur Edward Castaño