2010-07-28 9 views
0

Voici mon index.html.erb:l'action Rails ne rendant pas

<%= render :action => 'new' %> 

<% unless @posts.empty? %> 
    <%= render @posts %> 
<% end %> 

Les messages affichent, mais rien dans la page new est.

Ce n'est pas dans le journal soit:

Processing PostsController#index (for 127.0.0.1 at 2010-07-27 20:54:28) [GET] 
Post Load (0.2ms) SELECT * FROM "posts" 
Rendering template within layouts/application 
Rendering posts/index 
Rendered posts/_post (8.4ms) 

De plus, si je remplace en <%= render :new %>, je reçois l'erreur:

undefined method `include?' for :new:Symbol 

Mais il devrait me permettre de rendre les actions implicitement avec Rails 2.3.8.

Je vous serais reconnaissant si quelqu'un pouvait expliquer l'une de ces choses.

Répondre

1

Vous ne devriez rendre dans une vue partials. Puisque vous avez besoin du contenu en plusieurs vues, vous pouvez convertir le contenu de new.html.erb à un partiel (par exemple, _new.html.erb) puis

<%= render 'new' %> 

De new.html.erb ainsi que index.html.erb. render: action => 'actionname' est destiné à rendre le modèle d'une autre action depuis le contrôleur. Notez qu'il est courant de créer un _form.html.erb partial pour chaque modèle, et de l'utiliser chaque fois que vous avez besoin d'ajouter ou de modifier une instance de modèle d'ailleurs. Ce serait utile dans ce cas également. Vous devez ensuite rendre le formulaire partiel à partir de l'index, du nouveau et de l'édition.

0

Juste une pensée, mais je soupçonne que erb traitera ces deux blocs comme une seule ligne. Comme vous le savez probablement, dans Ruby, il est assez idiomatique de mettre une condition "à moins" ou "si" à la fin d'une ligne.

Vous pouvez ajouter un saut de ligne avant « à moins », mais après <%.