这是我的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隐式渲染动作。
如果有人能解释这些事情,我将不胜感激。
答案 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;%。
之后添加换行符