Undefined method 'each'


#1

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 Tracehttp://localhost:3000/movies/1 | Framework
Tracehttp://localhost:3000/movies/1 | Full
Tracehttp://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


#2

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


#3

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