Rails 3 - поиск по имени вместо id - PullRequest
6 голосов
/ 07 апреля 2011

Я пытаюсь выучить RoR, создаю свое первое приложение, базовое приложение для инвентаризации.Я попытался найти, но не смог найти правильный синтаксис, поэтому я подумал, что спросить.

Вот мои настройки:

Модель

class Item < ActiveRecord::Base
belongs_to :supplier

class Supplier < ActiveRecord::Base
has_many :items

Контроллер элементов

@items = Item.find_all_by_supplier_id '1'

Это вернет нужные мне данные, но я надеялся ввести имя поставщика в контроллер, чтобы, если идентификатор не совпадал, он все равно работал правильно.

Надеюсь, этого достаточно, спасибо!

Ответы [ 3 ]

18 голосов
/ 07 апреля 2011

Вы можете инвертировать бит вашего метода и попробовать:

@items = Supplier.find_by_name('THE NAME').items

Rails создает динамические методы find_by_ * и find_all_by_ * для поиска. Вместо того, чтобы извлекать элементы по supplier_id, я рекомендую вам позволить rails сделать это для вас с ассоциациями, которые вы установили, как в приведенном выше фрагменте кода. Внутри это все еще использует supplier_id, но rails обрабатывает процесс вместо вас.

Возможно и обратное, поэтому если у вас есть товар и вы хотите поставщика, вы можете сделать:

Item.find(1).supplier
0 голосов
/ 11 октября 2015
Supplier.find_by_colname(params[:name])

Где colname - это имя Supplier table column, в котором мы хотим проверить значение нашего параметра. В рельсах мы можем просто добавить имя столбца с find_by_, как показано выше, и рельсы покажут вам, что это волшебство;). Вот ссылка в Документ

0 голосов
/ 07 апреля 2011
@items = Item.joins(:suplier).where(:suplier => { :name => "Suplier name" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...