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!