Association to return only the first of an associated list

A little background: in our schema, Resource has_many :assets, through a join table called items.

Whenever we show a resource, we also show a thumbnail for its first associated asset. Currently, this means that we're doing a lot of sql action in the view: for example, a partial like this might be repeated 100 times:

.... <% asset = resource.assets.first %> <%= image_tag asset.name, asset.path %> ...

Obviously doing loads of little queries in the view isn't good: what i'd like to do is somehow eager-load that first asset with the include option. We tried making a method called 'primary_asset' which returns the first asset for a resource, but that can't be "include"d: i think that in order to include it i need to set it up as an association. Which leads me to my actual question: how do i set up a has_one association to return only the first asset from the collection of associated assets?

has_one doesn't seem to have an 'sql' option, otherwise i'd just do something like

  has_one :primary_asset, :class_name => "Asset", :sql => "SELECT assets.* FROM assets INNER JOIN items ON assets.id = items.asset_id WHERE ((items.resource_id = #{id})) ORDER BY position LIMIT 1"

Can anyone see how i can set this up? I'm using rails 2.0.2.

thanks, max

Have you tried

has_one :primary_asset, :class_name=>"Asset", :order=>"position"