Ruby on rails 在rails中渲染局部对象。为资源指定分部会产生错误,但不指定分部则可以。有什么好处?
我现在很偶然地做到了这一点,但当我明确指定要用于呈现资源的部分时,我不明白是什么导致它中断。有人能解释一下吗 my Posts controller的索引模板包含以下行,这给了我一个错误:Ruby on rails 在rails中渲染局部对象。为资源指定分部会产生错误,但不指定分部则可以。有什么好处?,ruby-on-rails,renderpartial,partials,Ruby On Rails,Renderpartial,Partials,我现在很偶然地做到了这一点,但当我明确指定要用于呈现资源的部分时,我不明白是什么导致它中断。有人能解释一下吗 my Posts controller的索引模板包含以下行,这给了我一个错误: <%= render partial: 'posts', collection: @posts %> 错误(在我的浏览器中)显示: NoMethodError-in-Posts#index 显示/Users/applebum/Sites/rails_projects/eventful2/ap
<%= render partial: 'posts', collection: @posts %>
错误(在我的浏览器中)显示:
NoMethodError-in-Posts#index
显示/Users/applebum/Sites/rails_projects/eventful2/app/views/posts/_posts.html.erb,其中第1行出现:
未定义的方法'any'#
提取的源(第1行附近):
1:
2:
三:
4:
将问题行更改为
<%= render @posts %>
使错误消失,帖子出现(以适当部分的标记很好地显示),正如我所希望和期望的那样
这里是my_posts.html.erb部分:
<% if posts.any? %>
<div id="posts">
<% posts.each do |post| %>
<%= render partial: "posts/post", locals: { post: post } %>
<% # render :partial => "comments/comments", :collection => post.comments %>
<% end %>
</div>
<% end %>
“评论/评论”,:集合=>post.comments%>
以及它所指的_post.html.erb部分,如果这很重要的话:
<div class="post" id="post_<%= "#{post.id}" %>">
<div class="post_inner">
<%= link_to avatar_for(post.user, size: "small"), post.user.profile %>
<div class="post_body">
<div class="user-tools">
<% if can? :destroy, post %>
<%= link_to '<i class="fi-x"></i>'.html_safe, post, :method => :delete, remote: true, :class => "delete", :confirm => "Are you sure you want to delete this post?", :title => post.content %>
<% end %>
</div>
<h5 class="username">
<%= link_to post.user.name, post.user.profile %>
<span class="timestamp">• <%= time_ago_in_words(post.created_at) %> ago</span>
</h5>
<div class="content">
<%= post.content %>
</div>
<ul class="foot">
<li>Like<li>
<li>Share</li>
</ul>
</div>
</div>
</div>
:delete,remote:true,:class=>“delete”,:confirm=>“确实要删除此帖子吗?”,:title=>post.content%>
&公牛;以前
- 像
-
- 分享
以及来自控制器的相关位:
class PostsController < ApplicationController
respond_to :html, :js # Allow for AJAX requests as well as HTML ones.
before_filter :load_postable
load_and_authorize_resource
def index
@post = Post.new
@posts = @postable.posts
end
private #################
def load_postable
klass = [User, Event].detect { |c| params["#{c.name.underscore}_id"] } # Look for which one of these there's a ***_id parameter name for
@postable = klass.find(params["#{klass.name.underscore}_id"]) # Call find on that, passing in that parameter. eg Event.find(1)
end
class PostsController
有人能解释一下这里发生了什么事吗?我在rubyonrails.org的布局和渲染指南中找不到任何内容
谢谢 您的错误来自于假设
:collection
和@posts
在渲染时的含义相同。发件人:
分部在呈现集合时非常有用。通过:collection选项将集合传递给分部时,将为集合中的每个成员插入一次分部
因此,如果您使用它,对于每个帖子,您将执行post.any?
操作,该操作失败,因为any?
不是为单个帖子定义的
从相同的文档中,您应该检查render是否返回Nil,以查看集合是否为空:
<h1>Posts</h1>
<%= render(@posts) || "There are no posts." %>
帖子
PD:使用局部渲染仅渲染一篇文章,而不是所有文章
GL&HF。Ohhh现在我明白了。是你的警察干的D谢谢!
<h1>Posts</h1>
<%= render(@posts) || "There are no posts." %>