Меня раздражает, что я забыл, что хотел получить возвращаемый результат функции и должен был добавить в конце скобку null () ... Я имею в виду, что работал над этим смущающе долго, чтобы этого никогда не было щелкнуть в моей голове ... и он находится прямо рядом с другими правильными вызовами функций буквально перед моим лицом.
Я думаю, что Вы хотите :primary_key
опция к has_many
. Это позволяет Вам указывать столбец на текущей Таблице, кто значение, хранится в :foreign_key
столбец на другой таблице.
has_many :tickets, :foreign_key => "user_login", :primary_key => "login"
Я нашел это путем чтения has_many документов.
Я думаю, что Вы ищете :foreign_key
опция на has_many
. Это должно позволить Вам указывать, что внешний ключ не user_id
, но user_login
, не корректируя логику средства поиска.
Дополнительную информацию см. в документации ActiveRecord has_many.
Просто ответив мне, в случае, если нет никакого лучшего решения. Я не мог найти решение с has_many ассоциацией, таким образом, я закончил тем, что создал простой метод средства поиска. Не большой вообще: это действительно позволяет мне называть some_user.tickets, но это не приносит мне всю пользу has_many ассоциаций (а именно, ясное, удаляет, <<... методы на самой ассоциации).
def tickets
return Ticket.find(:all, :conditions=>["user_login = ?", login])
end
Я все еще надеюсь, что кто-то предложит лучшее решение.
Чтобы иметь что-то вроде has_many: Tickets_since_subscription, вы можете использовать named_scopes:
В модели добавьте:
named_scope :since_subscription, lambda { |subscription_date| { :conditions => ['created_at > ?', subscription_date] }
С помощью этого вы можете найти то, что хотите, например:
user.tickets.since_subscription 3.days.ago
или
user.tickets.since_subscription user.subscription_date
(конечно, вам нужен столбец subscription_date в модели пользователя).
Вы можете найти больше примеров здесь .
Если вы не хотите использовать named_scopes, вы можете найти то, что хотите, с помощью этого:
user.tickets.all(:conditions => ['created_at > ?', subscription_date])