J'ai été plein de questions ces derniers temps, mais grâce à cette communauté géniale, j'apprends énormément.Polymorphisme et formes dans Ruby on Rails
J'ai eu toute l'aide dont j'avais besoin avec les associations polymorphes plus tôt et maintenant j'ai une question sur la façon d'aborder les formes avec des modèles polymorphes. Par exemple, j'ai Phoneable et User, donc quand je crée mon formulaire pour enregistrer un utilisateur, je veux être en mesure d'attribuer quelques numéros de téléphone à l'utilisateur (c'est-à-dire: cellule, travail, maison).
class User < ActiveRecord::Base
has_many :phones, :as => :phoneable
end
class Phone < ActiveRecord::Base
belongs_to :phoneable, :polymorphic => true
end
class CreateUsers < ActiveRecord::Migration
t.column :name, :string
t.references :phoneable, :polymorphic => true
end
class CreatePhones < ActiveRecord::Migration
t.column :area_code, :integer
t.column :number, :integer
t.column :type, :string
t.references :phoneable, :polymorphic => true
end
Maintenant, lorsque je crée mon formulaire, je suis confus. Normalement, je ferais ce qui suit:
- form_for :user, :html => {:multipart => true} do |form|
%fieldset
%label{:for => "name"} Name:
= form.text_field :name
##now how do I go about adding a phone number?
##typically I'd do this:
##%label{:for => "phone"} Phone:
##= form.text_field :phone
polymorphisme En utilisant, ce que j'approche de la même façon, mais utiliser fields_for?
- user_form.fields_for :phone do |phone| %>
%label{for => "area_code"} Area Code:
= phone.text_field :area_code
%label{for => "number"} Number:
= phone.text_field :number
Est-ce la bonne approche dans ce cas?
Grande réponse et un grand merci pour l'aide! C'est exactement ce que je cherchais. Juste pour clarifier cependant, avant que je rencontre des problèmes. Dans mes createUsers, je n'ai pas besoin d'inclure une colonne pour les téléphones? c'est-à-dire: t.colonne: téléphone,: phoneable Ou quelque chose du genre? –
Non, c'est comme n'importe quelle autre relation has_many, elle utilise les clés étrangères de la table polymorphique dans la jointure. –
Sweet. Merci encore! –