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.
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.