Re: render => partial not recognizing method in call

Max Reznichenko
Tue, 12 Jun 2012 12:34:46 -0000

Hi, Andrew

The error says the @composer variable is not set.
By the code I see, that you are setting @composer*s* variable.

Take a look at the starting guide on rendering in Ruby on Rails as an
approach itself is wrong.

Max

вторник, 12 июня 2012 г., 15:09:30 UTC+3 пользователь akkdio
написал:
>
> Perhaps it is something basic as a beginner I am.  I have the following:
>
> controllers:
> main
> editions
> works
> composers
>
> main:
> class MainController < ApplicationController
>   def welcome
>     @composers = Composer.find(:all).sort_by {|c| [c.last_name,
> c.first_name]}
>   end
> end
>
> works - editions - composers all have normal scaffold generated
> methods(CRUD)
>
> Models: - relavent info (hopefully) provided:
>
> class Composer < ActiveRecord::Base
>   attr_accessible :first_name, :last_name
>   has_many :works, dependent: :destroy
>   before_destroy :ensure_not_referenced_by_any_work
>
> ....
>  def editions
>     works.map {|work| work.editions}.flatten.uniq
>
>   end
> ....
> end
>
> class Edition < ActiveRecord::Base
>
>   validates :publisher_id, :description, :price, :year, presence: true
>   has_many :environments
>   has_many :works, through: :environments
>   belongs_to :publisher
>   has_many :orders
>
>   attr_accessible :descripition, :price, :work_id, :year, :title,
> :publisher_id
>
> ....
> end
>
> class Work < ActiveRecord::Base
>   attr_accessible :composer_id, :title
>
>   belongs_to :composer
>   has_many :environments
>   has_many :editions, :through => :environments
>
>   has_many :instruments, :through => :environments
> ...
> end
>
> class Environment < ActiveRecord::Base
>     attr_accessible :instrument_id, :name, :work_id, :edition_id
>     belongs_to :work
>     belongs_to :instrument
>     belongs_to :edition
>
> end
>
>
> I want the following partial to be shown in the Main#Welcome view:
>
> partial is located in the composer view folder:
>
> Editions List
>
> <% @composer.editions.map do |edition| %> #line 3 in error below
> <%= link_to_edition_title(edition)%>
> <% end %>
>
>
> The link_to_edition_title(edition)... may not be relavent but here it is
> in the edition helper module:
>
> def link_to_edition_title(edition)
>     link_to(edition.nice_title, edition_path(edition))
>   end
>
>
> My limited knowledge believes the call to the partial should work and
> indeed it does if done like this within the Composer#Show view:
>
> <%= render "edition" %>
>
> However, when I make the partial call from the Main#Welcome view like this:
> The Main#Welcome view:
>  <%= render :partial => "composers/edition" %>
>
> It results in this error:
>
> *NoMethodError in Main#welcome*
>
> Showing *
>
/Users/akkdio/railsapps/rails_3/ruby_for_rails/r4r_music/r4r_music1/app/views/composers/_edition.html.erb
> * where line *#3* raised:
>
> undefined method `editions'' for nil:NilClass
>
> This is the first linke of the trace:
>
> app/views/composers/_edition.html.erb:3:in
>
`_app_views_composers__edition_html_erb__1574837102347920251_2165688820''
>
> If more is needed please let me know.  Appreciate any nudge as to how I
> would change the partial or somehow get the editions method to be
> recognized in this call - the idea is to be able to share the partial
> across the application.
>
> Thanks for your help,
>
> Andrew
>
>
>
>

--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/rYDIajDUGRgJ.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.