Access to session variable in model

Hi everyone

I am using attachment fu for image uploading. I try to customize the
path for pictures be saved.

If I call session[:kwikerhash] in the image.rb where there method for
path definition is I get an undefined method or variable error. If I
fill a global variable @kwikerhash in the controller with the session
value and try to use it in the image.rb it says that @kwikerhash is nil.

Is there a possibility to get access to session values in model files?

Thanks in advance.

Regards

Adam

Hi Adam Meyer

Is there a possibility to get access to session values in model files?

  You can't do that and if any means doing that means violating MVC .
What you can do is to pass the session variable from controller to model
For example in the image.rb you have a

def do_this(session_id)

Sijo Kg wrote:

Hi Adam Meyer

Is there a possibility to get access to session values in model files?

  You can't do that and if any means doing that means violating MVC .
What you can do is to pass the session variable from controller to model
For example in the image.rb you have a

def do_this(session_id)
----
end

   So from controller you can pass it like

@image_model_obj.do_this(session[:kwikerhash])

Sijo

Hi Sijo

you're right. But if I set a value to @kwikerhash in the controller I
have also access to it in the view.

This is fucked. Because its a method which I override from the
attachment_fu plugin.

So I need to create the same method with parameters.

Thanks

Hello again,

sorry but I have no Idea how to solve it. I try to explain the problem.
I am using attachment_fu for picture upload and output. I wanna change
the attachment-fu to save the pics in a specific folder. Therefor my
image.rb looks

class Image < ActiveRecord::Base
  has_many :categories
  belongs_to :category
  belongs_to :products
  belongs_to :kwikers

  has_attachment :content_type => :image,
  :storage => :file_system, :path_prefix => 'public/assets/uploads',
  :max_size => 10.megabytes,
  :resize_to => '1024x1024>',
  :thumbnails => { :thumb => '150x150>'},
  :processor => :MiniMagick # attachment_fu looks in this order:
ImageScience, Rmagick, MiniMagick
  validates_as_attachment

   def uploaded_data=(file_data)
     return nil if file_data.nil? || file_data.size == 0
     self.content_type = file_data.content_type
     extension = file_data.original_filename.slice(/\.\w+$/)

     self.filename = Digest::SHA1.hexdigest(Time.now.to_s) + extension

     File.extname(file_data.original_filename) if respond_to?(:filename)
     if file_data.is_a?(StringIO)
       file_data.rewind
       self.temp_data = file_data.read
     else
         self.temp_path = file_data.path
     end
   end

   # START: FOLDER STRUCTURE MODIFYING CODE
   # Changes the folder structure
   def full_filename(thumbnail = nil)
     file_system_path = (thumbnail ? thumbnail_class :
self).attachment_options[:path_prefix]
     File.join(RAILS_ROOT, file_system_path,
created_at.strftime("%Y/%m/%d"), thumbnail_name_for(thumbnail))
   end
end

I want to replace the created_at.strftime("%Y/%m/%d") in the
full_filename method with the value which is set in
session[:kwikerhash]. But I don't know how. The view file calls a method
image.public_filename(:thumb) for example.

What can I do to let the full_filename method take the value from the
session?

Please help.

Adam

On your image model, you could add, for example:

class Image < ActiveRecord::Base
  attr_writer :session_date
....

and, on you controller, right after you create a new image:

@image = Image.new <whatever_parameters>
@image.session_date = session[:kwikerhash][<whatever_param>]

Hope this helps!