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.