Sharing a method, model, module or?

I need some overview thinking help.

I have Pictures model/controller but generally, I want to show pictures
via a partial displayed in other controller views and I want to do
things like choose the picture based upon various concepts of relevance.
I also want to update a ‘view_count’ column in the Pictures model each
time it is displayed.

So if in a partial in /users controller, I would love to be able to call
some Picture method (either model or controller but probably controller
is the more logical choice) but I can’t figure a way to do this…

<%= PictureController.some_method %> clearly gives me an error

if I try to put that code into a model…

<%= Picture.some_method %> I am still up a creek without a paddle

this works but clearly doesn’t belong in a view…

<% @pic_1 = Picture.find(:first, :conditions => [“active =
true”], :order => ‘view_count’); @pic_1.view_count += 1; @pic_1.save! %>

And of course my problem is that I want to use this ‘partial’ in a bunch
of different controllers & actions which is why I don’t want to include
it in each controller/method.

What is the best way to handle something like this?

Craig

–
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

On Feb 14, 6:56 am, Craig W. [email protected] wrote:

<%= Picture.some_method %> I am still up a creek without a paddle

this works but clearly doesn’t belong in a view…

<% @pic_1 = Picture.find(:first, :conditions => [“active =
true”], :order => ‘view_count’); @pic_1.view_count += 1; @pic_1.save! %>

Why can’t you stick all that in a class method on Picture ?

Fred

It depends on what you want the method to do.
Inside the Picture class, this should work:

class Picture < ActiveRecord::Base

…

def self.get_most_viewed_picture
pic = Picture.find(:first, :conditions => [“active = ?”, true],
:order
=> ‘view_count DESC’)
pic.increment! :view_count
pic
end

…

end

In the controller:

class UsersController < ApplicationController
def index
@picture = Picture.get_most_viewed_picture
end
end

In the view (/app/views/users/index.html.erb):

Most viewed picture:

<%= image_tag @picture.url %>

Should do the trick. If not, please explain a little more.

:slight_smile: Lasse

2010/2/14 Craig W. [email protected]

On Sun, 2010-02-14 at 17:06 +0100, Lasse B. wrote:

end

In the view (/app/views/users/index.html.erb):

Most viewed picture:

<%= image_tag @picture.url %>

Should do the trick. If not, please explain a little more.


pretty much did the trick and in the process, I learned about ‘class’
and ‘instance’ methods in the model so thanks very much - that was
important for me to finally understand. I didn’t know the exact language
for what I was looking for so I couldn’t find what I wanted on Google.
Once I did…

http://railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/

This was extremely valuable to me.

The Controller code was something I am trying to avoid.

Thanks

Craig

–
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.