English 中文(简体)
Drying up my rails models
原标题:

I have a couple of models which share a has_many associations, named scopes and validations.

What s the best way of drying these models up so they can share the same code?

Create a parent class and have these models inherit from that or would I be better off creating a module?

This is the type of code I m looking to dry up:

has_many :comments, :as => :commentable

has_permalink :title

validates_presence_of :title

has_attached_file :image

I ve already figured that I can use this in a module to handle the has_many associations but when I try something similar with has_permalink or has_attached_file then things break down.

def self.included(klass)
  klass.has_many :comments, :as => :commentable
end
最佳回答

You should use inheritance only if the models are true subtypes of some parent type, rather than as a convenient way to share code. Unlike some languages, Ruby has the module mechanism for the latter.

问题回答

In rails inheritance implies shared database structure, not just convenience. So like John said, you really only want to do it when they re so similar that they can share the same table with a couple extra fields tacked on here and there.

If you aren t looking for single-table inheritance then mixing in a module is certainly a great way to go and it s super easy. :)





相关问题
rails collection_select vs. select

collection_select and select Rails helpers: Which one should I use? I can t see a difference in both ways. Both helpers take a collection and generates options tags inside a select tag. Is there a ...

SSL slowness in EC2

We ve deployed our rails app to EC2. In our setup, we have two proxies on small instances behind round-robin DNS. These run nginx load balancers for a dynamically growing and shrinking farm of web ...

Auth-code with A-Za-z0-9 to use in an URL parameter

As part of a web application I need an auth-code to pass as a URL parameter. I am currently using (in Rails) : Digest::SHA1.hexdigest((object_id + rand(255)).to_s) Which provides long strings like : ...

RubyCAS-Client question: Rails

I ve installed RubyCAS-Client version 2.1.0 as a plugin within a rails app. It s working, but I d like to remove the ?ticket= in the url. Is this possible?

activerecord has_many :through find with one sql call

I have a these 3 models: class User < ActiveRecord::Base has_many :permissions, :dependent => :destroy has_many :roles, :through => :permissions end class Permission < ActiveRecord::...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

Text Editor for Ruby-on-Rails

guys which text editor is good for Rubyonrails? i m using Windows and i was using E-Texteditor but its not free n its expired now can anyone plese tell me any free texteditor? n which one is best an ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签