Forum: Ruby undefined method 'each'

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Joshua B. (Guest)
on 2008-11-17 20:41
(Received via mailing list)
I am following along in Ben Scofield's book (Practical REST on Rails 2
Projects). As I was building the MovieList application, I ran into an
undefined method for each, which I can't figure out how to debug (I am
new to ruby/rails).

Can someone point me in the correct direction on how to debug this
issue?



NoMethodError in MoviesController#update

undefined method `each' for #<Role:0x56ea30c>

RAILS_ROOT: E:/study/rails/movielist

Application Trace<http://localhost:3000/movies/1> | Framework
Trace<http://localhost:3000/movies/1> | Full
Trace<http://localhost:3000/movies/1>

E:/bin/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/attribute_methods.rb:256:in
`method_missing'

app/models/movie.rb:17:in `deleted_roles='

app/controllers/movies_controller.rb:70:in `update'

app/controllers/movies_controller.rb:69:in `update'



movies_controller.rb:

65  def update

66   @movie = Movie.find(params[:id])

67    debugger

68

69    respond_to do |format|

70      if @movie.update_attributes(params[:movie])

71        flash[:notice] = 'Movie was successfully updated.'

72        format.html { redirect_to(@movie) }

73        format.xml  { head :ok }

74      else

75        format.html { render :action => "edit" }

76        format.xml  { render :xml => @movie.errors, :status =>
:unprocessable_entity }

77      end

78    end

79  end



Movies.rb:

16  def deleted_roles=(values)

17    roles.find(*values).each(&:destroy)

18  end





Role.rb:

class Role < ActiveRecord::Base
  belongs_to :movie
  belongs_to :person

  validates_presence_of :movie_id, :person_id, :name

  def to_s
    [person.full_name, name].join(' - ')
  end
end
Bill W. (Guest)
on 2008-11-17 21:11
(Received via mailing list)
Hi Joshua,

Joshua B. wrote:

> NoMethodError in MoviesController#update
>
> undefined method `each' for #<Role:0x56ea30c>

You should post this question to the Rails list at
removed_email_address@domain.invalid   When you do, you'll need to provide
some
additional info.

Best regards,
Bill
James H. (Guest)
on 2008-11-17 21:12
(Received via mailing list)
Hi.

Note that #deleted_roles= is a setter method (you can tell by the
equality
sign) and that in the update method you are assigning to this method.

You probably need to look into attr_accessible to make a whitelist of
all
setters you want to be mass-assignable during #update and #create on
your
controller (a mass-assignable attribute is one that you can safely
assign
values to without worry -- an example of something you wouldn't want to
mass
assign is an the primary key value).

James
This topic is locked and can not be replied to.