저는이 작업이 지금 당장 우연히 일어나고 있습니다 만, 리소스를 렌더링하기 위해 partials를 사용하도록 명시 적으로 지정했을 때 어떤 문제가 발생하는지 이해하지 못합니다. 아무도 그것을 설명 할 수 있습니까? (브라우저에서)레일의 부분 렌더링. 자원에 대한 부분을 지정하면 오류가 발생하지만 부분을 지정하지 않으면 정상적으로 작동합니다. 뭐라 구요?
<%= render partial: 'posts', collection: @posts %>
오류 말했다 :
NoMethodError in Posts#index
Showing /Users/applebum/Sites/rails_projects/eventful2/app/views/posts/_posts.html.erb where line #1 raised:
undefined method `any?' for #<Post:0x000001064b21f0>
Extracted source (around line #1):
1: <% if posts.any? %>
2: <div id="posts">
3: <% posts.each do |post| %>
4: <%= render partial: "posts/post", locals: { post: post } %>
문제 라인을 변경
내 게시물 컨트롤러에 대한 인덱스 템플릿은 나에게 오류를 제공 한 다음 줄을 포함 ~
<%= render @posts %>
오류가 사라지고 게시물이 표시됩니다 (멋지게 표시됨). 적절한 부분으로부터의 마크 업에서).
<% 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.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>
을 그리고 컨트롤러에서 해당 비트
여기 내 부분 _posts.html.erb입니다 :
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
아무도 나에게 무슨 일이 일어나는지 설명 할 수 있습니까? rubyonrails.org의 레이아웃 및 렌더링 가이드에서 아무 것도 찾을 수 없었습니다.
감사합니다.
오우 이제 알겠습니다. 네 PD가 해냈어. : D 고마워! – Reb