2012-07-02 5 views
0

C'est vraiment simple, mais je deviens un peu fou et il manque probablement quelque chose qui me regarde en face. Quelqu'un peut-il aider?Rails 3.1 - Résultat supplémentaire de chaque boucle?

Fondamentalement, j'ai une simple boucle chaque boucle qui retourne une ligne voyous supplémentaire. Même quand il n'y a rien dans le db, je reçois une ligne retournée!

Mon point de vue du spectacle dont la boucle est:

<p id="notice"><%= notice %></p> 

<p> 
    <b>Header:</b> 
    <%= @mailer.header %> 
</p> 

<p> 
    <b>Subtext:</b> 
    <%= @mailer.subtext %> 
</p> 

<div id="" class="" padding-left: 30px;>  
<h3>Mailer Products </h3> 

<ol id="mailer-Product-list"> 
<% @mailer.mailer_products.sort_by { |mailer_products| mailer_products.position }.each do |mailer_product| %> 
    <%= content_tag_for :li, mailer_product do %> 
    <%= mailer_product.product.cat_no %> 
<% end %> 
<% end %> 
</ol> 

    <%#= link_to 'Done', @product, :class => "standard-button" %> 
</div> 



<%= form_for([@mailer,@mailer.mailer_products.build]) do |f| %> 

    <div class="field"> 
    <%= f.label :product_id %><br /> 
    <%= f.text_field :product_id %> 
    </div> 

    <div class="field"> 
    <%= f.hidden_field :mailer_id, :value => @mailer.id %> 
    </div> 

    <div class="actions"> 
    <%= f.submit "Add Product" %> 
    </div> 
<% end %> 


<%= link_to 'Edit', edit_mailer_path(@mailer) %> | 
<%= link_to 'Back', mailers_path %> 

Le code du contrôleur est:

class MailersController < ApplicationController 

    def show 
    @mailer = Mailer.find(params[:id]) 
    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render :json => @mailer } 
    end 
    end 

class MailerProductsController < ApplicationController 

    def index 
    @mailer_products = MailerProduct.find(:all) 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render :json => @mailer_products } 
    end 
    end 
end 

end 
+0

Qu'est-ce que vous obtenez lorsque vous tapez 'mailer.mailer_products' sur la console (avec le mailer approprié)? – YuriAlbuquerque

+0

Est-ce un 'has_many: mailer_products' dans votre modèle' Mailer'? Si oui, essayez d'envoyer un message '@ mailer.mailer_products.count'. –

+0

Pastin le travail plutôt que la version ne fonctionne pas du code est plutôt bizarre. –

Répondre

2

Votre appel à form_for ressemble à ce

form_for([@mailer,@mailer.mailer_products.build]) do |f| 

Vous obtenez un élément supplémentaire vide parce que ce appelant .build sur mailer_products fait: il ajoute une nouvelle instance au tableau

Lorsque le formulaire est après la boucle cela n'a pas d'importance, mais lorsque les choses sont dans l'autre sens, la boucle sera sur le tableau modifié

0

Mon erreur habituelle est d'ajouter un <%= au lieu d'un <% sur la boucle ...

<%= @foo.each do |itme| %> 
# do stuff 
<% end %> 

qui devrait être

<% @foo.each do |itme| %> 
# do stuff 
<% end %> 

Vérifiez vos étiquettes ...

+0

Merci, les étiquettes sont exactement comme ci-dessus, ce n'est pas triste. – Raoot