I''am creating an image uploading system for advertise site in Rails
Using receipt 57 from the book rails recipies.
1 action give different returns in safari and Firefox
def file_data=(file_data)
if file_data.blank?
else
@file_data = file_data
write_attribute ''extension'' ,
file_data.original_filename.split( ''.'' ).last.downcase
end
end
when a create an advert in Safari without an image the file_date.blank?
works well and i can save my advert without an picture.
But firefox ignores the file_data.blank? so i get an no method error
#You have a nil object when you didn''t expect it!
#The error occured while evaluating nil.downcase
#{RAILS_ROOT}/app/models/advert.rb:51:in `file_data=''
#{RAILS_ROOT}/app/controllers/home_controller.rb:111:in `createadvert''
Firefox ignores the if file_data.blank?
How can i made that both browsers do the same thing and works Ie the
same like fireox in this case
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Ruby code its not processed by the browsers... the only matter is that the Firefox its sending something and Safari not... To see it deep I need the code of the view and the controller... And, please, don''t use an if with no code inside... use better: def file_data=(file_data) unless file_data.blank? @file_data = file_data write_attribute ''extension'' , file_data.original_filename.split( ''.'' ).last.downcase end end> 1 action give different returns in safari and Firefox > > def file_data=(file_data) > if file_data.blank? > else > @file_data = file_data > write_attribute ''extension'' , > file_data.original_filename.split( ''.'' ).last.downcase > end > end > > when a create an advert in Safari without an image the file_date.blank? > works well and i can save my advert without an picture. > But firefox ignores the file_data.blank? so i get an no method error > > #You have a nil object when you didn''t expect it! > #The error occured while evaluating nil.downcase > > #{RAILS_ROOT}/app/models/advert.rb:51:in `file_data='' > #{RAILS_ROOT}/app/controllers/home_controller.rb:111:in `createadvert'' > > Firefox ignores the if file_data.blank? > How can i made that both browsers do the same thing and works Ie the > same like fireox in this case-- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
In my controller i have this
def newadvert
@advert = Advert.new
end
def createadvert
user = @session[''user'']
@advert = Advert.new(params[:advert])
if @advert.save
redirect_to :action => ''saveadvert'', :id => @advert
else
render :action => ''newadvert''
end
end
def saveadvert
user = @session[''user'']
@advert = Advert.find(params[:id])
if @advert.update_attributes(params[:advert])
@advert.update_attribute "user_id", user.id
@advert.update_attribute "username", user.login
@advert.update_attribute "town", user.town
@advert.update_attribute "province", user.province
@advert.update_attribute "email", user.email
@advert.update_attribute "phone", user.phone
@advert.update_attribute "mobile_phone",
user.mobile_phone
@advert.save
flash[:notice] = "Bedankt voor het plaatsen van uw
advertentie"
redirect_to :controller => "home", :action =>
"showadvert", :id => @advert
end
end
This is te view of mine site
<%= error_messages_for ''advert'' %>
<div id= "objects">
<h2>Adverteer</h2>
Velden met een * zijn verplichte velden.
<% form_for :advert, @advert, :url=> {:action =>
''createadvert'' },
:html=>{:multipart=>true} do |f| %>
<%= render :partial => ''form''
%><br><br>
<label for= '' image_file_data'' >Image
File:</label>
<%= f.file_field :file_data %><br/>
<%= options = Advert::OBJECT_TYPE
select("advert", "object_type", options)
%>
<%= submit_tag "Adverteer", :confirm => ''Are you
sure?'' %>
<%= link_to ''Back'', :action => ''list''
%>
</div>
<% end %>
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
I find out that firexox send a string like "file_data"=>#<StringIO:0x24d4b28> And safari sends "file_data"=>"" How can i handle the different pieces of code the controller recieves -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> def createadvert > user = @session[''user''] > @advert = Advert.new(params[:advert]) > if @advert.save > redirect_to :action => ''saveadvert'', :id => @advert > else > render :action => ''newadvert'' > end > endI just tried the code and works fine in Firefox... I don''t know what''s the problem...mmm. Try restarting the server process... Another thing I have seen in your code... Why you save and advert and after redirect to saveadvert and update some attributes and save it again? And one thing more, ... don''t use @session, use session. It''s better using the method not the variable. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Moises Deniz wrote:>> def createadvert >> user = @session[''user''] >> @advert = Advert.new(params[:advert]) >> if @advert.save >> redirect_to :action => ''saveadvert'', :id => @advert >> else >> render :action => ''newadvert'' >> end >> end > > I just tried the code and works fine in Firefox... I don''t know what''s > the problem...mmm. Try restarting the server process...I found out Firefox send an StringIO while Safari sends an blank file_data unless file_data == "<StringIO:0x24d4b28>" doesn''nt work beause the string is different each time> Another thing I have seen in your code... Why you save and advert and > after redirect to saveadvert and update some attributes and save it > again?That''s because when i do the update attributes into the createadvert the validates_prescence will say the advert is''nt complete but the incomplete advert wil be sved with the other atributes -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> I found out Firefox send an StringIO while Safari sends an blank > file_data > unless file_data == "<StringIO:0x24d4b28>" doesn''nt work beause the > string is different each time >Its a strange error... If you try to upload a real file, what kind of object do you receive?> That''s because when i do the update attributes into the createadvert the > validates_prescence will say the advert is''nt complete but the > incomplete advert wil be sved with the other atributesThinking about your code..., I just think that the user information should be linked to the advert using an association (has_one)... maybe, if the User its a ActiveRecord model. If the user is associated with the advert you only need to store the user_id on the advert and you can do all in the createadvert action. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I tried to save an user_id withot the action saveadvert it doesn''t work at this moment. But my biggest problem at this moment is that firefox send information to the model that brings an error. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Firefox sends code like this wheb the file field is empty "file_data"=>#<StringIO:0x24735a8> how can i tell the model that it must ignore this information -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
GA Gorter wrote:> Firefox sends code like this wheb the file field is empty > > "file_data"=>#<StringIO:0x24735a8> how can i tell the model that it must > ignore this informationAnd when you try to upload a file.., what value have file_data?? It''s to see the differences... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
After taking some rest for a day i tried again, and found a solotion for firefox.> def file_data=(file_data) > @firefox = file_data > return if file_data.blank? > return if file_data == @firefox > @file_data = file_data> write_attribute ''extension'' , > file_data.original_filename.split( ''.'' ).last.downcase > end So for safari the computer uses>return if file_data.blank?And for Firefox it works>@firefox = file_data > return if file_data == @firefoxI believe this solotion is not so reprensative but i don''t know how i can make 1 function for both browsers I''am hoping internet explorer won''t have problems with this wile i can''t test on internet explorer -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---