Як в Rails 3 я можу отримати запис, переглянувши віртуальний атрибут? Я маю name
стовпчик і a slug
це робить просту модифікацію його (див. код нижче). Як я можу зробити "зворотний пошук" шляхом slug
до name
?
Я намагаюся знайти правильний код для find_by_slug
метод нижче:
class Brand < ActiveRecord::Base
has_many :sale_items
validates :name, :uniqueness => true
def slug
self.name.downcase.gsub(/s/, "-")
end
def self.find_by_slug(given_slug)
first(slug: given_slug)
end
end
Коли я намагаюся find_by_slug
на консолі Rails я " Unknown key: slug
помилка
Це питання здається подібним, але я не впевнений, чи це те саме, що і моя проблема. Я вдячний за деяке розуміння та допомогу!
Відповіді:
1 для відповіді № 1Оскільки slug у вашій базі даних не існуєВи не можете запитати його спочатку. Що потрібно зробити, це пошук за ім'ям. Але для цього потрібно відобразити ваше "ім'я до слизу", яке має бути зворотним. Вам потрібно вміти робити
name = "San Francisco"
slug = convert_to_slug(name) #san-francisco
name == convert_to_name(slug) #true
Тож, задавши слизу, ви знаєте, як це буде ім'я - тоді ви можете зробити find_by_name.
downcase.gsub(/s/, "-")
не є оборотним, якщо не є явніінформація, яку ви "не ділите з нами", наприклад, "є лише пробіли, і кожна перша буква пишеться з великої літери". Тому це "не можна зробити, і вам" найкраще зробити цей звичайний атрибут, а не віртуальний. Якщо ваша конверсія оборотна, тоді вам просто доведеться скористатися
find_by_name(convert_to_name(slug))