Dans ma page d'affichage, j'utilise form_tag pour créer un formulaire qui transmet une chaîne d'identificateurs d'un champ masqué au code du contrôleur.Mise à jour des enregistrements dans une base de données à l'aide du formulaire
Dans mon code de contrôleur, je parcourt un tableau d'ID pour mettre à jour chaque enregistrement contenant cet ID dans la table Expression. Mais le code ci-dessous ne semble pas fonctionner. J'apprécierais vraiment si quelqu'un pourrait me donner une suggestion concernant ce qui ne va pas avec le code ci-dessous.
def update_expression
@emi_ids_array = params[:emi_ids].split(/,/)
@sub_id = params[:sub_id]
@emi_ids_array.each do |emi_id|
@existing_exp = Expression.find(:first, :conditions => [ "EXT_EMI_ID = ? and EXT_SUB_FK = ?", emi_id, @sub_id])
@expression = @existing_exp.update_attributes(
:EXT_SUB_FK => @sub_id,
:EXT_PRESENCE => "present",
:EXT_STRENGTH => "weak",
:EXT_EMI_ID => emi_id
)
end
end
Juste vérifier mais les params correctement transmises à la fonction - peut-être augmente params.inspect pour vérifier. Est-ce Rails 2 ou 3? (Si 3 peut-être modifier l'instruction Expression.find à Expression.where). Expression.find renvoie-t-il des résultats? Essayez-le dans la console avec quelques params connus et relancez inspecter le @existing_exp retourné? – Pasted
Oui, la méthode find renvoie la valeur correcte – tanya
Peut-être essayer les noms de colonnes en minuscules - ne savez pas comment ruby et rails se comportent avec des noms de colonne en majuscule puisqu'ils ne seront pas considérés comme des constantes? Pensez que vous pouvez contourner ce problème en créant vos propres méthodes getter et setter (très anciennes http://snippets.dzone.com/posts/show/2034) ou une variante de Rails 3 (http://stackoverflow.com/questions/ 4605543/rails-3-facilement-travailler-avec-pascal-case-column-names) – Pasted