The problem may be that when you call render partial with the
collection parameter, you need use a singular file name for the
partial:
<ol class="selections">
<%= render partial: 'selections/details', collection: @microposts %>
</ol>
should be:
<ol class="selections">
<%= render partial: 'selections/detail', collection: @microposts %>
</ol>
Also, you need to variable name in the partial to be the same as the
partial file:
*****view selections/details *************
<li>
<span class="selection">
<% user = User.find_by_id(micropost.user_id) %>
<%= user.name %>
</span>
</li>
should be (note file name changed would be _detail.html.erb)
*****view selections/_detail *************
<li>
<span class="selection">
<% user = User.find_by_id(detail.user_id) %>
<%= user.name %>
</span>
</li>
see http://guides.rubyonrails.org/layouts_and_rendering.html, section
3.4.5 Rendering Collections
On Fri, Aug 16, 2013 at 12:22 PM, Ephraim Feig <[email protected]> wrote:
> I have numerous paginations in my application; they all look alike; all but
> one work fine. The one broken one breaks at the very last step. The details
> are below. I have 3 classes- Micropost, Category, Selection. I have a link
> that points to details_controller, which renders a view
> /selections/detailslist which in turn renders the partial
> /selections/details. The code successfully gets to the last view and breaks
> in the third line, with the error message "undefined local variable or
> method `micropost' for #<#<Class: ...." Any help here would be greatly
> appreciated.
>
> class Micropost < ActiveRecord::Base
> attr_accessible :content, :category_content, :selection_content,
> :category_id, :selection_id, :user_id
>
> belongs_to :user
> belongs_to :category
> belongs_to :selection
> validates :user_id, presence: true
> validates :category_content, presence: true
> validates :selection_content, presence: true
> end
>
>
> class Category < ActiveRecord::Base
> attr_accessible :content, :id, :count, :c_count
> has_many :selections
> has_many :microposts
> end
>
> class Selection < ActiveRecord::Base
> attr_accessible :content, :count, :category_id
> belongs_to :category
> has_many :microposts
> end
>
> ****** view with link *****
> <li>
> <span class="selection">
> <%= selection.content %>
>    
> ( <%= selection.count %> )
>    
> <%= link_to "Details", controller: :details, param1: selection.id,
> param2: selection.category_id %>
> </span>
> </li>
>
> ****** details_controller***********
> class DetailsController < ApplicationController
> require 'will_paginate/array'
> respond_to :html, :js
>
> def index
> #@category = Category.find_by_id(params[:param2])
> @selection = Selection.find_by_id(params[:param1])
> @microposts = @selection.microposts.paginate(page: params[:page])
> render '/selections/detailslist'
> end
> end
>
> ******* view /selections/detailslist**********
> <% @category = Category.find_by_id(@selection.category_id) %>
> <h3> <%= @category.content %> </h3>
> <br>
> <%= @selection.content %>
>  
> ( <%= @selection.count %> )
> <br>
> <ol class="selections">
> <%= render partial: 'selections/details', collection: @microposts %>
> </ol>
> <%= will_paginate @microposts %>
>
>
> *****view selections/details *************
> <li>
> <span class="selection">
> <% user = User.find_by_id(micropost.user_id) %>
> <%= user.name %>
> </span>
> </li>
>
>
> ****** error message *********
> undefined local variable or method `micropost' for #<#<Class:
>
> --
> --
> SD Ruby mailing list
> [email protected]
> http://groups.google.com/group/sdruby
> ---
> You received this message because you are subscribed to the Google Groups
> "SD Ruby" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
--
--
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
---
You received this message because you are subscribed to the Google Groups "SD
Ruby" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.