Rails has_many с finder_sql и name_scope в комбинации возвращают ноль - PullRequest
3 голосов
/ 07 октября 2011

Например, скажем, у вас есть:

       class Model < AR::Base 
         has_many :somethings, :finder_sql => "SELECT * FROM somethings"
       end

       class Something < AR::Base
         named_scope :valuable {...code...}
       end

       # Assume you have one model but 0 somethings:  
       # Model.first.somethings          # => [] Good!
       # Model.first.somethings.valuable # => nil Bad! Should return [] !!!

Это происходит только тогда, когда у вас есть finder_sql в отношении has_many. В других случаях это работает как ожидалось.

Это нормальное поведение Rails 2.3.14?

1 Ответ

2 голосов
/ 07 октября 2011

да, если вы укажете finder_sql, вы не сможете добавлять области. это потому, что finder_sql предназначен для ситуаций, которые не соответствуют обычной парадигме activeRecord. Это сказанное, способ, которым Вы построили это, является неправильным. вам не нужно хранить select * без фильтров в таких отношениях. Цель отношения - применить фильтр к другой модели. Итак, у вас есть это Model.find (params [: id]). Somethings - это то же самое, что и вызов Something.all. область будет работать для вас в последнем случае, потому что .all может быть ограничена.

...