Я решил проблему самостоятельно. Перед публикацией ответа я должен сказать, что все должны использовать консоль пользователя rails
У меня есть следующие соотношения
class User < AR::Base
has_one :item_preference
has_one :item_preference, :through => :user_preference, :source => :item
has_one :favorite_preference
has_one :favorite_preference, :through => :user_preference, :source => :favorite
has_one :recent_preference
has_one :recent_preference, :through => :user_preference, :source => :recent
has_one :user_preference
end
class UserPreference < ActiveRecord::Base
belongs_to :item,
:foreign_key => "item_results",
:class_name => "Preference"
belongs_to :favorite,
:foreign_key => "favorite_results",
:class_name => "Preference"
belongs_to :recent,
:foreign_key => "recent_results",
:class_name => "Preference"
belongs_to :user
end
class Preference < ActiveRecord::Base
has_many :item_preferences,
:foreign_key => "item_results",
:class_name => "UserPreference"
has_many :favorite_preferences,
:foreign_key => "favorite_results",
:class_name => "UserPreference"
has_many :recent_preferences,
:foreign_key => "recent_results",
:class_name => "UserPreference"
end
Теперь я могу получить доступ к значениямкак
User = User.find(16)
user.item_preference
[:] [DEBUG] [2010-09-16 17:09:54] [ App::OnlineOrdering] - Preference Load (0.4ms) SELECT `preferences`.* FROM `preferences` INNER JOIN `user_preferences` ON `preferences`.id = `user_preferences`.item_results WHERE ((`user_preferences`.user_id = 16))
=> #<Preference id: 1, value: "20", created_at: "2010-09-15 15:13:04", updated_at: "2010-09-15 15:13:04">
и наоборот
preference = Preference.find(1)
preference.item_preferences
[:] [DEBUG] [2010-09-16 17:09:23] [ App::OnlineOrdering] - UserPreference Load (0.4ms) SELECT * FROM `user_preferences` WHERE (`user_preferences`.item_results = 1)
[:] [DEBUG] [2010-09-16 17:09:23] [ App::OnlineOrdering] - UserPreference Columns (1.2ms) SHOW FIELDS FROM `user_preferences`
=> [#<UserPreference id: 1, user_id: 16, item_results: 1, favorite_results: 2, recent_results: 2, created_at: "2010-09-15 15:13:04", updated_at: "2010-09-15 15:13:04">]