Вам действительно нужна дополнительная модель для этого?
если вам нужно хранить растущее количество URL-адресов для сайтов социальных сетей или других веб-сайтов, вы можете сделать следующее:
1) определить миграцию для добавления текстового столбца :social_sites
в вашу модель пользователя
class AddSorialSitesToUsers < ActiveRecord::Migration
def self.up
add_column :users, :social_sites, :text
end
def self.down
remove_column :users, :social_sites
end
end
2) определить атрибут: social_sites для сериализации
class User < ActiveRecord::Base
serialize :social_sites
end
3) Затем присвойте Hash или OrderedHash значение user.social_sites
и сохраните запись.
u = User.find(1)
u.social_sites = {:facebook => 'http://facebook.com/somebody', :twitter => "http://twitter.com/somebody", ...}
, поскольку это Hash, вы можете назначить столько разных имен Service в качестве ключей, сколько захотите ... а затем итерировать ключи Hash, чтобы получить их ... или напрямую обращаться к ним по имени сайта.
например:
u = User.find(1)
puts u.social_sites[:facebook]
puts u.social_sites[:twitter]
...
Улучшение:
Если вы хотите хранить больше, чем просто URL для каждого сайта, вы можете использовать вложенные хэши следующим образом:
u.social_sites = {:facebook => {:url => "http://facebook.com/username", :icon => "url-or-filename-to-the-icon"} ,
:twitter => {:url => "http://twitter.com/username", :icon => "url-or-filename-to-the-icon"}
}
Rails будет сериализовать Hash (ы) в единый атрибут: social_sites, и когда вы получите к нему доступ, он будет десериализован - вы можете просто получить к нему доступ, как и любой другой Hash
u = User.find(1)
puts u.social_sites[:facebook][:url]
=> "http://facebook.com/username"
puts u.social_sites[:facebook][:icon]
=> "url-or-filename-to-the-icon"
надеюсь, это поможет