Rails动作不呈现

时间:2010-07-28 02:08:37

标签: ruby-on-rails

这是我的index.html.erb

<%= 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隐式渲染动作。

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

2 个答案:

答案 0 :(得分:1)

您应该只在视图中渲染部分内容。由于您需要多个视图中的内容,您可以将new.html.erb的内容转换为部分(例如,_new.html.erb)然后

<%= render 'new' %>

来自new.html.erb以及index.html.erb。 render:action =&gt; 'actionname'用于从控制器中呈现另一个动作的模板。

请注意,它是为每个模型创建_form.html.erb部分的常用习惯用法,并且只要您需要能够从其他地方添加或编辑模型实例,就可以使用它。在这种情况下,这也很有用。然后,您将从索引,新建和编辑中呈现表单部分。

答案 1 :(得分:0)

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

您可能希望在“除非”之前但在&lt;%。

之后添加换行符