(22-01-2013, 02:16 PM)Sephi-Chan a écrit : A quoi sert le @user.build_hero
? Que fait-il ? Du code serait le bienvenu.
Il me sert à accéder à mon objet Héros
pour ma page d'inscription car j'ai un nested form pour la création du héros de l'utilisateur.Alors, voici mes modèles :
class User < ActiveRecord::Base
attr_accessible :contact_email, :email, :password, :password_confirmation, :persistence_token, :role, :hero, :hero_attributes
has_one :hero, dependent: :destroy
accepts_nested_attributes_for :hero
email_regex = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
validates :email, presence: true,
format: email_regex,
uniqueness: { case_sensitive: false }
validates :password, presence: true,
confirmation: true,
length: 6..40
validates :password_confirmation, presence: true
end
class Hero < ActiveRecord::Base
attr_accessible :firstname, :lastname, :nation, :race, :rank, ex
belongs_to :user
SEX = %w( Homme Femme Autre )
validates :firstname, :format => { with: /^[a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿ]+$/i },
:length => { within: 3..12 },
:presence => true,
:uniqueness => { case_sensitive: false, scope: :lastname }
validates :lastname, :format => { with: /^[a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿ\x20'-]+$/i },
:length => { within: 3..18 },
:if => lambda { |hero| !hero.lastname.blank? }
validates :nation, :presence => true,
:inclusion => { in: Nation::NAMES }
validates :race, :presence => true,
:inclusion => { in: lambda do |hero|
Race::NAMES[hero.nation] ||= []
Race::NAMES[hero.nation]
end }
validates ex, :presence => true,
:inclusion => { in: self::SEX }
end
class Race
NAMES = {
'klum' => %w( dwarf gwanling human ),
'garn' => %w( orc voda_orc gobelin ),
'ulysk' => %w( sylvan_elf dwarf human ),
'ludwynn' => %w( high_elf night_elf lowland_human )
}
end
class Nation
NAMES = %w( klum garn ulysk ludwynn )
end
Ma vue "new" :
= simple_form_for @user, :url => register_path, :validate => true do |u|
.observator
= t('observator.register.introduction')
.col-50
%h2= t('hero')
= u.simple_fields_for :hero do |h|
= h.input :firstname
= h.input :lastname
= h.input :nation, :collection => Nation::NAMES.map { |name| [ t(name, scope: 'nations'), name ] }
= h.input :race, :collection => @race.map { |name| [ t(name, scope: 'races'), name ] }
= h.input ex, :collection => Hero::SEX
.col-50
%h2= t('avatar')
.avatar
= image_tag 'avatar/sample.png'
%h2= t('connexion')
= u.input :email
= u.input :password
= u.input :password_confirmation
.col-100
.field
= raw t('rules_agreement', :rules_link => link_to(t('rules_link'), rules_path))
= u.submit t('title.register')
(22-01-2013, 02:16 PM)Sephi-Chan a écrit : Le coup duC'était une solution provisoire, mais ça recoupe en partie les problèmes d'instanciation ^^render 'home/index'
me semble à éviter. Dès lors que ta page d'accueil aura plus de complexité (et aura besoin de moult@variables
), tu ne pourras décemment pas ajouter toutes ses dépendances dans ton actioncreate
. Je pense qu'une redirection est plus adaptée dans ce cas.