Как делают я передаю строку has_many: параметр finder_sql?

Меня раздражает, что я забыл, что хотел получить возвращаемый результат функции и должен был добавить в конце скобку null () ... Я имею в виду, что работал над этим смущающе долго, чтобы этого никогда не было щелкнуть в моей голове ... и он находится прямо рядом с другими правильными вызовами функций буквально перед моим лицом.

5
задан MiniQuark 1 December 2008 в 20:54
поделиться

4 ответа

Я думаю, что Вы хотите :primary_key опция к has_many. Это позволяет Вам указывать столбец на текущей Таблице, кто значение, хранится в :foreign_key столбец на другой таблице.

has_many :tickets, :foreign_key => "user_login", :primary_key => "login"

Я нашел это путем чтения has_many документов.

4
ответ дан 14 December 2019 в 09:03
поделиться

Я думаю, что Вы ищете :foreign_key опция на has_many. Это должно позволить Вам указывать, что внешний ключ не user_id, но user_login, не корректируя логику средства поиска.

Дополнительную информацию см. в документации ActiveRecord has_many.

1
ответ дан 14 December 2019 в 09:03
поделиться

Просто ответив мне, в случае, если нет никакого лучшего решения. Я не мог найти решение с has_many ассоциацией, таким образом, я закончил тем, что создал простой метод средства поиска. Не большой вообще: это действительно позволяет мне называть some_user.tickets, но это не приносит мне всю пользу has_many ассоциаций (а именно, ясное, удаляет, <<... методы на самой ассоциации).

def tickets
    return Ticket.find(:all, :conditions=>["user_login = ?", login])
end

Я все еще надеюсь, что кто-то предложит лучшее решение.

0
ответ дан 14 December 2019 в 09:03
поделиться

Чтобы иметь что-то вроде 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]) 
2
ответ дан 14 December 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: