我是铁轨上的红宝石新手,我想练习它。 当我想将视图包含在另一个视图中时,我陷入了困境。 我希望通过这样做将我的帖子放到另一个视图而不是帖子/索引
posts/index
方法:
def index
@Posts = Post.all
end
视图:
<% @posts = capture do %>
<% @posts.each do |post| %>
<h3>
<%= post.title %>
</h3>
<p>
<%= post.content %>
</p>
<% end %>
<% end %>
pages/index
<h1> Index Of another pages </h1>
<%= @posts %>
答案 0 :(得分:0)
听起来我觉得你需要将可重复使用的视图代码保存为部分代码,然后将其渲染到所需的所有位置。
要使用部分内容,请使用下划线前缀保存,即_posts.html.erb
。
然后可以使用以下方式呈现:
<%= render 'path/to/posts' %>
您可能需要将posts变量传递给partial,如下所示:
<%= render 'path/to/posts', posts: @posts %>
并将您的观点更改为使用posts
而不是@posts
。
更新
capture
的结果已分配给@posts
,但此变量仍然无法在其他模板中使用 - 而是在同一页面上再次使用
根据您对项目结构的看法,听起来您需要以下内容:
在app / views / posts / _posts.html.web
中<% @posts.each do |post| %>
<h3>
<%= post.title %>
</h3>
<p>
<%= post.content %>
</p>
<% end %>
在两个控制器'index
操作中:
@posts = Post.all
在帖子/索引视图中:
<%= render 'posts' %>
在页面/索引视图中:
<%= render 'posts/posts' %>
我不想混淆事情,但Rails在那里有一点魔力 -
或者 - 您可以按如下方式定义部分_post.html.erb
:
<h3>
<%= post.title %>
</h3>
<p>
<%= post.content %>
</p>
只需在每个视图中调用<%= render @posts %>
即可。这将是最好的'Railsy'做事方式。
让我知道你是怎么过的!
答案 1 :(得分:0)
如果要强制索引操作呈现另一个视图,请使用以下代码:
def index
@Posts = Post.all
render 'pages/index'
end
如果我没有找到你,请纠正我