2013-03-31 26 views
1

我有一个简单的博客应用程序和帖子。如何在`show`页面以及第二个较大的部分渲染一个小部分

我使用部分_post.html.erb呈现我的索引页中的帖子。

_post.html.erb的div class=submission_details与我的show操作中使用的值相同。 如何将部分分段,以便我可以在_post.html.erb部分页面和show.html.erb页面中使用它?

posts_controller.rb

def index 
    @posts = Post.all 
end 

def show 
    @post = Post.find(params[:id]) 
end 

帖/ index.html.erb

<%= render @posts %> 

帖/ _post.html.erb

<%= post.title %> 
<div class="submission_details"> 
    <%= time_ago_in_words(post.created_at) %> 
    <span id="submission_details_<%= post.id %>"> 
    submitted by <%= link_to "#{post.user.name} (#{post.user.reputation_for(:points).to_i})", post.user %> 
    </span> 
</div> 

帖/ show.html.erb

<%= @post.title %> 
<%= @post.content %> 
<div class="submission_details"> 
    <%= time_ago_in_words(@post.created_at) %> 
    <span id="submission_details_<%= @post.id %>"> 
    submitted by <%= link_to "#{@post.user.name} (#{@post.user.reputation_for(:points).to_i})", @post.user %> 
    </span> 
</div> 

我试图使一个shared/submission_details局部象下面这样:

共享/ _submission_details.html.erb

<%= time_ago_in_words(@post.created_at) %> 
    <span id="submission_details_<%= @post.id %>"> 
    submitted by <%= link_to "#{@post.user.name} (#{@post.user.reputation_for(:points).to_i})", @post.user %> 
    </span> 

这呈现为showrender 'shared/submission_details'执行,但在index操作中给了我零。如何正确定义index操作的@post?

回答

1

在一个局部的,您可以定义一个局部变量,当渲染部分,正确的语法是:

render(partial: 'post_information', locals: { post: @post } 

但可以缩写为

render('post_information', post: @post) 

这对于展示操作,在部分情况下,您的帖子实例不在变量@post上,但是在第Ë局部变量,所以你可以做:

render('post_information', post: post) 

帖子/ index.html.erb

<%= render @posts %> 

帖子/ _post.html.erb

<%= post.title %> 
<div class="submission_details"> 
    <%= render 'post_information', post: post %> 
</div> 

posts/show.html。ERB

<%= @post.title %> 
<%= @post.content %> 
<div class="submission_details"> 
    <%= render 'post_information', post: @post %> 
</div> 

帖子/ _post_information.html.erb

<%= time_ago_in_words(post.created_at) %> 
<span id="submission_details_<%= post.id %>"> 
submitted by <%= link_to "#{post.user.name} (#{post.user.reputation_for(:points).to_i})", post.user %> 
</span> 
+0

谢谢@rorra。一旦你得到答案,它总是很容易! – umezo

+0

欢迎光临,它只是一个小小的练习,一定要时刻回到导轨上,关于partials的文档在http://guides.rubyonrails.org/layouts_and_rendering.html上。 – rorra

相关问题