JeuWeb - Crée ton jeu par navigateur
[Résolu][Rails] Has_one et massive-assignment - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][Rails] Has_one et massive-assignment (/showthread.php?tid=2916)



[Résolu][Rails] Has_one et massive-assignment - Holy - 14-01-2013

Bonjour à tous,

J'ai un petit soucis suite à l'inclusion d'un nested form au sein de mon formulaire d'inscription. J'ai deux classes (User et Hero) qui sont en relation one-to-one et j'ai un petit soucis quand je veux enregistrer un utilisateur :
Code :
Can't mass-assign protected attributes: hero

J'ai bien nesté mon formulaire, j'ai renseigné la relation one-to-one, j'ai rendu les attributs de Hero accessibles dans la classe User, je sais plus trop où chercher ^^

Vue Register (simplifiée) :
= form_for @user do |form|
.col-50
%h2 Héros

= form.fields_for :hero do |hero|
.field
= hero.label :firstname, 'Prénom'
= hero.text_field :firstname

.field
= hero.label :lastname, 'Nom'
= hero.text_field :lastname

.col-50
%h2 Connexion

.field
= form.label :email, 'Adresse email'
= form.text_field :email
Paramètres issus de mon formulaire :
{"utf8"=>"✓",
"authenticity_token"=>"XAjWWFffADq00ll+yq0+CGAx2pvtj8pVOhmVYO2d1cQ=",
"user"=>{"hero"=>{"firstname"=>"Lulin",
"lastname"=>"de Dün",
"nation"=>"Empire Mécanique de Klüm",
"race"=>"Nain",
"sex"=>"Homme"},
"email"=>"test@test.com",
"pass"=>"---",
"pass_confirmation"=>"---"},
"commit"=>"S'inscrire"}
Modèle User :
class User < ActiveRecord::Base
attr_accessible :contact_email, :email, :pass, :pass_confirmation, :login, Confusedtate, :hero_attributes

has_one :hero, :dependent => :destroy

end
Modèle Hero :
class Hero < ActiveRecord::Base
attr_accessible :firstname, :lastname, :nation, :race, :rank, Confusedex
belongs_to :user
end
Contrôleur Users :
class UsersController < ApplicationController
def register
@title = "S'engager"
@user = User.new
end

def create
@user = User.new(params[:user])

if @user.save
else
@title = "S'engager"
render 'register'
end
end
end



RE: [Rails] Has_one et massive-assignment - Sephi-Chan - 14-01-2013


class User < ActiveRecord::Base
# On ajoute :hero ici, vu que c'est ce à quoi il ne peut pas accéder.
attr_accessible :contact_email, :email, :login, :pass, :pass_confirmation, Confusedtate, :hero_attributes, :hero

...
end



RE: [Rails] Has_one et massive-assignment - Holy - 14-01-2013

(14-01-2013, 08:58 AM)Sephi-Chan a écrit :

class User < ActiveRecord::Base
# On ajoute :hero ici, vu que c'est ce à quoi il ne peut pas accéder.
attr_accessible :contact_email, :email, :login, :pass, :pass_confirmation, Confusedtate, :hero_attributes, :hero

...
end
Y a de la magie, mais pas partout en Rails Tongue

Merci pour ce petit coup de pouce Wink


RE: [Résolu][Rails] Has_one et massive-assignment - Sephi-Chan - 14-01-2013

Tout ça va dégager très bientôt (avec Rails 4 ou dès maintenant avec strong_parameters) pour reprendre la place qui lui revient de droit : dans les contrôleurs. Smile