J'ai un modèle de relation unidirectionnelle entre utilisateurs (les utilisateurs ont plusieurs relations) qui contient les identifiants de deux utilisateurs donnés ainsi que le surnom de l'utilisateur a pour l'utilisateur b. Je veux utiliser un formulaire pour permettre aux utilisateurs de saisir l'adresse e-mail d'un autre utilisateur et le surnom. Si un utilisateur avec cette adresse e-mail existe, alors une relation est créée entre les utilisateurs. Si aucun utilisateur ne correspond, créez un nouvel utilisateur "fantôme" avec cette adresse électronique, puis établissez la relation.
Je suis relativement nouveau dans le domaine des rails, et j'ai d'abord essayé naïvement d'utiliser la version de base :
= form_for @relationship do |f|
= f.label :email
= f.text_field :email
= f.label :nickname, "Nickname"
= f.text_field :nickname
= f.submit "Submit", class: "btn btn-large btn-primary"
Cette opération échoue car le modèle de relation ne contient pas d'attribut email. J'ai alors essayé ce qui suit, en pensant que cela pourrait fonctionner parce qu'il n'y avait pas de référence directe au modèle de relation.
= form_tag :controller => "relationships", :action => "create" do
= label :email
= text_field :email
= label :nickname, "Nickname"
= text_field :nickname
= submit "Submit", class: "btn btn-large btn-primary"
Mais cela jette une erreur "mauvais nombre d'arguments (1 pour 2)".
Je pourrais ajouter un champ email au modèle de relation, mais il n'est pas nécessaire, sauf lorsque je l'utilise pour rechercher l'utilisateur souhaité. J'avais prévu d'utiliser les valeurs de l'email et du pseudo transmises à l'action create du contrôleur de relation pour créer la relation ou créer un nouvel utilisateur, puis la relation, selon le cas. Alors, comment puis-je transmettre des valeurs arbitraires à une action de contrôleur ?