How to access a model method from within a view?

I have asked this question on this forum:

I think that main key here is how can I access the method in a model within a view. Is there a way to do that?

Thanks.

Abder-Rahman Ali wrote:

I have asked this question on this forum: Getting the dimensions of an image element - Rails - Ruby-Forum

I think that main key here is how can I access the method in a model within a view. Is there a way to do that?

If you have a model object, you can always call methods on it.

But be careful! The principles of MVC architecture state that there shouldn't be very much logic (if any!) in your view code. You probably want to move the method call to a helper or the controller.

Thanks.

Best,

Thanks Marnen.

Should I write the code the gets the height and width in a helper?

Do you have an idea of how to do that?

Any ideas on this yet?

models are accessible from all levels of the application, so you can access them the same way you access them from controllers

Thanks radhames.

Can you kindly show me a way on how to code this? As I have been stuck on that for a while.

Thanks.

show the code where you are trying to access, ill see whats wrong with it

radhames brito wrote:

show the code where you are trying to access, ill see whats wrong with it

Thanks @radhames.

The main issue is how to make a call to the height() and width() methods in the model in this line in "show.html.erb":

<canvas id="draw" height = "???" width= "???"> </canvas>

This is my model"dicom.rb":

class Dicom < ActiveRecord::Base   has_attached_file :photo, :styles => {   :original => ["100%", :jpg],   }

  def height()   uploaded_file = photo.queued_for_write[:original]   dimensions = Paperclip::Geometry.from_file(uploaded_file)   return dimensions.height end

  def width()   uploaded_file = photo.queued_for_write[:original]   dimensions = Paperclip::Geometry.from_file(uploaded_file)   return dimensions.width   end end

And, this is my "show.html.erb":

<%= javascript_include_tag "coordinate" %> <canvas id="draw" height = "" width= ""> </canvas> <p id="notice"><%= notice %></p> <p> <b> Name </b> <%= @dicom.name %> </p> <p> <b> Image </b> </p> <div id="image_element" style="display: none;"> <p> <%= image_tag @dicom.photo.url , :id => 'dicom_image' %> </p> </div> <%= update_page_tag do |page| page << "drawImg();" end %> <%= update_page_tag do |page| page << "drawLine();" end %> <%= link_to 'Edit', edit_dicom_path(@dicom) %> <%= link_to 'Back', dicoms_path %>

Thanks a lot.

@radhames. If you want me to send you the whole application, can you sen me your email?

I don't know if you can send me a private message through www.ruby-forum.com?

Thanks.

What's wrong with <%= some_object.width %> ?

Fred

Frederick Cheung wrote:

</canvas>

What's wrong with <%= some_object.width %> ?

Fred

I tried:

<canvas id="draw" height = "@dicom.height" width= "@dicom.width"> </canvas>

But, I don't the expected dimensions.

As when I calculated the dimensions using this Javascript function:

I found that the image width and height is 512x512, and the displayed image is not correct, as when I manually enter the height and width values in the "Canvas", I get a larger image that the one I'm getting.

Frederick Cheung wrote:

</canvas>

What's wrong with <%= some_object.width %> ?

Fred

I tried:

<canvas id="draw" height = "@dicom.height" width= "@dicom.width">

You have to put the bits of ruby code that you want expanded inside <%= %> <canvas id="draw" height = <%= @dicom.height %> width= <%= @dicom.width %> >

Colin

Colin Law wrote:

Frederick Cheung wrote:

</canvas>

What's wrong with <%= some_object.width %> ?

Fred

I tried:

<canvas id="draw" height = "@dicom.height" width= "@dicom.width">

You have to put the bits of ruby code that you want expanded inside <%= %> <canvas id="draw" height = <%= @dicom.height %> width= <%= @dicom.width %> >

Colin

Oh, thansk Colin, I forgot <%= %>. When I do that, I get:

Showing C:/Users/Abder-Rahman/Desktop/Research/dcm/app/views/dicoms/show.html.erb where line #2 raised:

is not recognized by the 'identify' command.

Either when I write it as:

<canvas id="draw" height = <%=@dicom.height%> width= <%=@dicom.width%> >

Or,

<canvas id="draw" height = "<%=@dicom.height%>" width= "<%=@dicom.width%>" >

What do you think?

If this is only in the show method - one record, I assume, why not pass the height and width as instance variables in the method call which are then available in the view?

Bb Serviss wrote:

If this is only in the show method - one record, I assume, why not pass the height and width as instance variables in the method call which are then available in the view?

Thanks @Bb. How do you think this can be done?

ok, im back.

has_attached_file :photo, :styles => { :original => [“100%”, :jpg], } <=== this here is incomplete and is you are only having the original image there is no need to specify the style, and paperclip wont convert the image to jpg, also is not good to put convertion in the same thread as the main app.

def height() uploaded_file = photo.queued_for_write[:original] dimensions = Paperclip::Geometry.from_file(uploaded_file) <==== is better to save the image in a specific size by doing return dimensions.height :styles=>{:small=>“150x150>”,:big=>“900x900>”} end

def width() uploaded_file = photo.queued_for_write[:original] dimensions = Paperclip::Geometry.from_file(uploaded_file) <==== is better to save the image in a specific size by doing return dimensions.width :styles=>{:small=>“150x150>”,:big=>“900x900>”} end end

them you always know the correct size, but anyway your question is wrong as this has nothing to do with models, your height() are unnecesary as you should just save the width and height on the save event as properties.

add width and hieght as fields of the table.

def before_save baunds = Paperclip::geometry.from_file(uploaded_file(:original))

width = bounds.width
height = bounds.height

end

then instanciate and object and call the properties from it

" is not recognized by the ‘identify’ command."

you are running the paperclip on windows , you have to hack it so that the command can be executed by the cmd.exe

in this branch is suppose to be fixed

http://github.com/ghazel/paperclip.git

radhames brito wrote:

" is not recognized by the 'identify' command."

you are running the paperclip on windows , you have to hack it so that the command can be executed by the cmd.exe

in this branch is suppose to be fixed

GitHub - ghazel/paperclip: Easy file attachment management for ActiveRecord

I think the link is broken?

Thanks @radhames for your thorough explanation.

I still have the same issue. I think I may have a problem in making an instantiation.

My model now is as follows:

class Dicom < ActiveRecord::Base   has_attached_file :photo, :styles => {   :original => ["100%", :jpg],   }

  def before_save   uploaded_file = photo.queued_for_write[:original]   dimensions = Paperclip::Geometry.from_file(uploaded_file)   height = dimensions.height   width = dimensions.width   end end

And, I have done this in "show.html.erb":

<canvas id="draw" height="<%=@dicom.height%>" width="<%=@dicom.width%>"

What am I missing?

Thanks a lot.

did you created the fields in the database? do that and it should work