From: James Herdman Date: 2008-11-18T04:09:02+09:00 Subject: Re: undefined method 'each' ------=_Part_52623_11241440.1226949150850 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline 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 On Mon, Nov 17, 2008 at 1:37 PM, Joshua Ball wrote: > 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 # > > RAILS_ROOT: E:/study/rails/movielist > > Application Trace | 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 > > ------=_Part_52623_11241440.1226949150850--