Можно ли применить фильтры к модели внутри представления в Ruby on Rails? - PullRequest
0 голосов
/ 27 декабря 2018

Можно ли применить фильтры к модели внутри кода вида:

Я использую axlsx для генерации Excel, и я попробовал что-то подобное в моем файле myview.xlsx.axlsx:

fs = MyModel.where(:Column1 => v1, :Column2 => v2)
puts fs[0].Column1

Я получил ошибку

undefined method Column1 for nil:NilClass

Я почти уверен, что с моим фильтром все в порядке, поэтому мне интересно, разрешено ли иметь такой фильтр внутри представления (и если такие фильтры следует размещать только внутри контроллеравместо этого)

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы можете иметь такой код в представлениях, хотя вам следует избегать логики в представлениях и перемещать его в контроллер или помощника.Проблема здесь в том, что отношение активной записи пустое:

fs = MyModel.where(:Column1 => v1, :Column2 => v2) #=> #<ActiveRecord::Relation []>
fs[0] #=> nil

Вы можете использовать try, чтобы избежать возникновения исключения, если отношение пусто, и вместо этого возвращать nil:

fs[0].try(:Column1) #=> nil
0 голосов
/ 27 декабря 2018

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

В вашем случае выглядит, что запрос возвращает пустую коллекцию, и поэтому fs[0] равно nilи вы не можете вызвать метод для этого.

...