Ruby on rails 如何在“show”页面以及第二个较大的部分中呈现小部分

Ruby on rails 如何在“show”页面以及第二个较大的部分中呈现小部分,ruby-on-rails,Ruby On Rails,我有一个简单的博客应用程序 我使用部分\u post.html.erb在我的索引页面中呈现帖子 \u post.html.erb有一个divclass=submission\u details,它与我的show操作中使用的内容相同。 我如何将该部分拆分,以便在\u post.html.erb部分和show.html.erb页面中使用它 posts\u controller.rb def index @posts = Post.all end def show @post = Post.

我有一个简单的博客应用程序

我使用部分
\u post.html.erb
在我的索引页面中呈现帖子

\u post.html.erb
有一个div
class=submission\u details
,它与我的
show
操作中使用的内容相同。 我如何将该部分拆分,以便在
\u post.html.erb
部分和
show.html.erb
页面中使用它

posts\u controller.rb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>
posts/index.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

这是由
render'shared/submission\u details'
show
操作渲染的,但在
索引中给了我零。如何为
索引
操作正确定义@post?

在分部上,可以定义一个局部变量,渲染分部时,正确的语法为:

render(partial: 'post_information', locals: { post: @post }
但这可以缩写为

render('post_information', post: @post)
对于show操作,在部分\u post.html.erb的情况下,您的post实例不在变量@post上,而是在局部变量post上,因此您可以执行以下操作:

render('post_information', post: post)
posts/index.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

posts/\u post.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

posts/show.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

posts/\u post\u information.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

提交人

在分部上,可以定义一个局部变量,渲染分部时,正确的语法为:

render(partial: 'post_information', locals: { post: @post }
但这可以缩写为

render('post_information', post: @post)
对于show操作,在部分\u post.html.erb的情况下,您的post实例不在变量@post上,而是在局部变量post上,因此您可以执行以下操作:

render('post_information', post: post)
posts/index.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

posts/\u post.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

posts/show.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

posts/\u post\u information.html.erb

def index
  @posts = Post.all
end

def show
  @post = Post.find(params[:id])
end
<%= render @posts %>
<%= 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>
<%= @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>
  <%= 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>
<%= render @posts %>
<%= post.title %>
<div class="submission_details">
  <%= render 'post_information', post: post %>
</div>
<%= @post.title %>
<%= @post.content %>
<div class="submission_details">
  <%= render 'post_information', post: @post %>
</div>
<%= 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>

提交人

谢谢@rorra。一旦你得到了答案,它看起来总是那么容易!欢迎光临,这只是一个小小的练习,一定要经常回到rails指南上,关于partials的文档已经打开了。谢谢@rorra。一旦你得到了答案,它看起来总是那么容易!欢迎光临,这只是一个小小的练习,请确保不时回到rails指南中,关于partials的文档已经打开了。