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:
<h3>Editions List</h3>
<ul>
<% @composer.editions.map do |edition| %> #line 3 in error below
<li><%= link_to_edition_title(edition)%></li>
<% end %>
</ul>
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/-/2_gkXWtYjj4J.
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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
On 12 June 2012 13:09, akkdio <akkdio-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Perhaps it is something basic as a beginner I am. I have the following:There was no need to show all this code, it is easier for us to see what is going on if you just show the relevant bits> [snip]> > I want the following partial to be shown in the Main#Welcome view: > > partial is located in the composer view folder: > > <h3>Editions List</h3> > <ul> > <% @composer.editions.map do |edition| %> #line 3 in error below > [snip] > > 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:NilClassThat means that @composer is nil, since that is the object on which ''editions'' is being called. Have a look at the Rails Guide on Layouts and Rendering, particularly the section Using Partials to see how to pass local variables to the partial. Also have a look at the guide on debugging to get ideas on how to debug your code so that you can work out what is going on. I notice that you have asked for help twice before on this list and neither time did you reply to the suggestions offered or report whether you had found a solution. :( Colin -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. 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. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Max Reznichenko
2012-Jun-12 12:34 UTC
Re: render => partial not recognizing method in call
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: > > <h3>Editions List</h3> > <ul> > <% @composer.editions.map do |edition| %> #line 3 in error below > <li><%= link_to_edition_title(edition)%></li> > <% end %> > </ul> > > 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. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> > Perhaps it is something basic as a beginner I am. I have the following: > > There was no need to show all this code, it is easier for us to see > what is going on if you just show the relevant bits > > Understand and thanks.> > [snip] > > > > > I want the following partial to be shown in the Main#Welcome view: > > > > partial is located in the composer view folder: > > > > <h3>Editions List</h3> > > <ul> > > <% @composer.editions.map do |edition| %> #line 3 in error below > > [snip] > > > > 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 > > That means that @composer is nil, since that is the object on which > ''editions'' is being called. > > Have a look at the Rails Guide on Layouts and Rendering, particularly > the section Using Partials to see how to pass local variables to the > partial. > > Also have a look at the guide on debugging to get ideas on how to > debug your code so that you can work out what is going on. >Will check this. thanks.> > I notice that you have asked for help twice before on this list and > neither time did you reply to the suggestions offered or report > whether you had found a solution. :( >Not an excuse but I was not notified of the someone answering... Sorry. This time I checked back and check "email updates to me" Sorry again - I appreciate all the guidance i can get.> > Colin >-- 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/-/TZRkMTdo6vcJ. 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Tuesday, June 12, 2012 3:55:32 PM UTC-4, akkdio wrote:> > > > >> > Perhaps it is something basic as a beginner I am. I have the >> following: >> >> There was no need to show all this code, it is easier for us to see >> what is going on if you just show the relevant bits >> >> Understand and thanks. > >> > [snip] >> >> > >> > I want the following partial to be shown in the Main#Welcome view: >> > >> > partial is located in the composer view folder: >> > >> > <h3>Editions List</h3> >> > <ul> >> > <% @composer.editions.map do |edition| %> #line 3 in error below >> > [snip] >> > >> > 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 >> >> That means that @composer is nil, since that is the object on which >> ''editions'' is being called. >> >> Have a look at the Rails Guide on Layouts and Rendering, particularly >> the section Using Partials to see how to pass local variables to the >> partial. >> >> Also have a look at the guide on debugging to get ideas on how to >> debug your code so that you can work out what is going on. >> > > Will check this. thanks. > >> >> I notice that you have asked for help twice before on this list and >> neither time did you reply to the suggestions offered or report >> whether you had found a solution. :( >> > > Not an excuse but I was not notified of the someone answering... Sorry. > This time I checked back and check "email updates to me" Sorry again - I > appreciate all the guidance i can get. > >> >> Colin >> >My solution/learning (sort of) I read through the Rails Guide and it was somewhat helpful - lots to learn - My disconnect however that I was under the impression that the partial because it worked when I used in the composer show method it would work in the Main#Welcome view. Well, this is incorrect because in the Composer#Index view I click on the Composer ID (set up as a link_to on the id: <td><%= link_to composer.id, composer_path(composer) %></td> This is how the partial gets the composer id in order make the editions partial work and why the editions method returned a Nil when called from the Main#welcome view. It was saying " what composer? I can''t find no stinking Composer" If I do want the editions listed in the Main#Welcome view for each composer then I will have to find a way to send the editions method the composer id it is looking for. Time for more reading. Thanks all for the nudge. -- 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/-/rjdaeRelwt4J. 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.