2010-06-14 6 views
0

Je suis un débutant de Rails et je veux faire quelque chose, mais continuez à faire des bêtises. J'aimerais de l'aide.Aide pour créer une action dans une autre page de démonstration

J'ai une application simple qui a trois tables. Utilisateurs, robots et destinataires Les robots appartiennent aux utilisateurs et les destinataires appartiennent aux robots.

Sur la page d'affichage du robot, je souhaite pouvoir créer des destinataires pour ce robot directement dans la page d'affichage du robot.

je le code suivant dans la page show robot qui liste les bénéficiaires actuels:

<table> 

<% @robot.recipients.each do |recipient| %> 
    <tr> 
    <td><b><%=h recipient.chat_screen_name %></b> via <%=h recipient.protocol_name</td> 

    <td><%= link_to 'Edit', edit_recipient_path(recipient) %>&nbsp;</td> 
    <td><%= link_to 'Delete', recipient, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
<% end %> 
</table> 

Ce que je voudrais faire est d'avoir un champ vide dans lequel l'utilisateur peut ajouter un nouveau destinataire, et ont essayé ce qui suit:

Je a ajouté à la vue Afficher les robots:

<% form_for(@robot.recipient) do |f| %> 
Enter the screen name<br> 
<%= f.text_field :chat_screen_name %> 
<p> 
    <%= f.submit 'Update' %> 
</p> 
<% end %> 

et ce au contrôleur de robot dans l'action show:

@recipient = Recipient.new 
    @recipients = Recipient.all 

Hélas, je suis toujours obtenir une erreur de NoMethod qui dit: « méthode non définie du destinataire pour # »

Je ne sais pas ce que je suis absent. Toute aide serait grandement appréciée.

Merci.

Répondre

0

Plutôt que d'appeler @robot.recipient dans le formulaire, vous voulez probablement @recipient.

+0

Cela a fonctionné en ce que je peux voir le champ sur la page d'affichage du robot, mais il semble qu'il n'attache pas le destinataire au robot particulier. J'ai ce dans le contrôleur de destinataire pour l'action create: @recipient = Recipient.new (params [: destinataire]) et plus tard: format.html {redirect_to (robot_path (@ recipient.robot))} Quand je mettre quelque chose dedans et le créer, il va à la page d'index de destinataires, et me donne une erreur de: méthode non définie 'Recipient 'pour # Ne semble pas être routage à la page d'affichage du robot que je J'attends, ni enregistrer le destinataire comme appartenant au robot. – Andrew

+0

désolé, a manqué d'espace, mais je voulais dire merci pour l'aide jusqu'à présent. Des idées sur ce qui pourrait se passer? – Andrew

0

Utilisez @recipient, comme @ealdent dit.

Votre action de mise à jour devrait être un peu semblable à ceci:

def update 
    @robot = Robot.find(params[:id]) 
    @robot.recipients.build(params[:recipient]) 
    ... 
end 

Cela va créer le destinataire dans la collection pour le robot donné.

Mais il y a de bien meilleures façons de le faire, vous pouvez ajouter un nombre illimité de destinataires, comme expliqué here

Hope this vous permet de démarrer.

+0

Cela provoque une erreur No Method lorsque j'appuie sur create. Il dit: méthode non définie 'destinataires 'pour nil: NilClass. Donc, je suis clair, c'est ce que j'ai dans le contrôleur de destinataires dans l'action de création: @recipient = @ robots.recipients.build (params [: destinataire]) – Andrew

+0

J'ai clarifié un peu j'espère. Ça devrait être @robot, pas @robots. – nathanvda

Questions connexes