Ruby on Rails Thursday, December 6, 2012

On 6 December 2012 10:16, Jean-David <jeandavid.cohen@gmail.com> wrote:

Please don't top post, it makes it difficult to follow the thread.
Insert you reply inline at appropriate points in the previous message.
Thanks

> I supposed it was obvious... ; )

Not sure why it would be obvious.

>
> Seriously, line 45 is in the update function:
>
> 40 def update
> 41 @lead = Lead.find_by_id( params[:id] )
> 42
> 43 upload
> 44
> 45 if @lead.update_attributes!(params[:lead])

It is also better not to use html as now the fact that you highlighted
the line above is not visible.
Have you checked that @lead is not nil?
Have a look at the Rails Guide on Debugging to get lots of ideas on
how to debug your code. Start by looking in log/development.log to
check that the attributes are being passed correctly. Then, for
example, use the debugger to break into the code and check what is
going on or put diagnostic puts statements in to inspect the data.

Colin

> 46 flash[:success] = "Leaderboard successfully updated."
> 47 redirect_to @lead
> 48 else
> 49 render action: "edit"
> 50 end
> 51 end
>
>
>
> Le jeudi 6 décembre 2012 11:05:59 UTC+1, Colin Law a écrit :
>>
>> On 6 December 2012 09:43, Jean-David <jeandav...@gmail.com> wrote:
>> > NOOB ALERT
>> >
>> > Now I warned you, here's the problem that's been getting me mad for
>> > hours
>> >
>> > I've got a model for content I'm calling "lead". It has a title, a text
>> > and
>> > an image used as a background.
>> >
>> > I'm not using paperclip or CarrierWave to handle the image file (and I
>> > don't
>> > want to, one of my needs here is to learn how this all works).
>> > I'm using this function to upload the file (it comes directly from the
>> > rails
>> > guides) :
>> >
>> > def upload
>> > if params[:lead][:illustration]
>> > uploaded_io = params[:lead][:illustration]
>> >
>> > File.open(Rails.root.join('app', 'assets', 'images',
>> > uploaded_io.original_filename), 'wb') do |file|
>> > file.write(uploaded_io.read)
>> > end
>> >
>> > @lead.illustration = "#{uploaded_io.original_filename}"
>> > end
>> > end
>> >
>> > When creating a "lead", everything goes fine with create:
>> >
>> > def create
>> > @lead = Lead.new( params[:lead] )
>> >
>> > upload
>> >
>> > if @lead.save
>> > flash[:success] = "Lead successfully added."
>> > redirect_to @lead
>> > else
>> > redirect_to root_path
>> > end
>> > end
>> >
>> > The "lead" gets saved, I can use it. So far, so good.
>> >
>> >
>> > Now with the problem (remember the NOOB ALERT).
>> > Updating a lead without modifying the image goes fine, but updating with
>> > a
>> > new image returns this error:
>> >
>> >
>> > NoMethodError in LeadsController#update
>> >
>> > undefined method `name' for nil:NilClass
>> >
>> > and
>> >
>> > app/controllers/leads_controller.rb:45:in `update'
>>
>> The error says that you are calling method 'name' for something that
>> is nil at line 45 in leads_controller.rb.
>>
>> >
>> >
>> > Here's my update function:
>> >
>> > def update
>> > @lead = Lead.find_by_id( params[:id] )
>> >
>> > upload
>> >
>> > if @lead.update_attributes!(params[:lead])
>> > flash[:success] = "Leaderboard successfully updated."
>> > redirect_to @lead
>> > else
>> > render action: "edit"
>> > end
>> > end
>> >
>> > Basically the same as create. I've been googling and going back and
>> > forth
>> > for hours and I didn't get to solve this. Any help would be more than
>> > welcome.
>>
>> Unfortunately you have not told us which is line 45.
>>
>> 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@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment