Can you extend an association, but only for a specific instance?

ActiveRecord allows an association to be extended, as in:

module FindWeeklyExtension
def weekly(start)
where(“created_at > :t1 and created_at < :t2”,
:t1 => start,
:t2 => start + 7.days
)
end
end

class Author
has_many :posts, :extend => FindWeeklyExtension
end

Over time, though, classes might start to include many modules:

class Author
# several modules

has_many :posts, :extend => [...]

end

You might notice that you only need an extension or module to exist in
one particular context:

module WeeklyDigest
def weekly_posts(start)
posts.weekly(start)
end
end

So it’d be cleaner not to have that in the class, and instead to do
something like this:

Author

class Author
has_many :posts # we refactored :extend => FindWeeklyExtension …
end

module WeeklyDigest
def weekly_posts(start)
posts.extend FindWeeklyExtension # … and moved it here
posts.weekly(start)
end
end

However, this doesn’t work:

NoMethodError: undefined method `where’ for #<Array:
0x00000007d0e970>

So, is there a good way to extend an association, but only for a
specific instance’s association?

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs