2010-07-28 102 views
0

这里是我的index.html.erbRails的动作不渲染

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

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

的职位显示,但没有在new页面。

这不是在日志中可以:

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) 

另外,如果我只用<%= render :new %>取代它,我得到的错误:

undefined method `include?' for :new:Symbol 

但应该让我暗中渲染动作与Rails 2.3.8。

如果有人能解释这些事情,我将不胜感激。

回答

1

您应该只在视图内渲染部分。既然你需要在多个视图中的内容,可以new.html.erb的内容转换到部分(比如,_new.html.erb),然后

<%= render 'new' %> 

从new.html.erb以及index.html.erb。 render:action =>'actionname'用于渲染控制器内的另一个动作模板。

请注意,它为每个模型创建一个_form.html.erb部分的常见习惯用法,并且每当您需要能够从别处添加或编辑模型实例时使用它。这在这种情况下也是有用的。然后,您将从index,new和edit呈现表单部分。

0

只是一个想法,但我怀疑erb会将这两个块视为一条线。正如你可能知道的那样,在Ruby中,在行尾加上“除非”或“如果”条件是非常习惯的。

您可能希望在“除非”之前但在<%之后添加换行符。