метод усечения доступа в методе модели - PullRequest
0 голосов
/ 25 июня 2019

truncate предназначен в качестве помощника вида.Однако, если метод модели должен быть вызван для создания строки для использования контроллером (с конечным намерением передать строку в динамически генерируемый JavaScript)

 "#{title}" + " " + "#{main_text.truncate(length: 120)}" 

завершается неудачно с undefined method 'truncate' for nil:NilClass Ошибкавводит в заблуждение, поскольку "#{title}" + " " + "#{main_text}" правильно отображает.

Как можно обрезать один эффект?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

main_text равно nil, поэтому вы получаете сообщение об ошибке

undefined method 'truncate' for nil:NilClass

Чтобы убедиться, что вы обрабатываете nil, вы можете использовать оператор безопасной навигации

"#{title} #{main_text&.truncate(120)}"

Это будет работать на ruby ​​2.3 +

Если вы используете ruby ​​<2.3, вы можете использовать </p>

"#{title} #{main_text.try(:truncate, 120)}"
1 голос
/ 25 июня 2019

Даже если вы передаете nil помощнику truncate, представление все равно должно отображаться ... т.е. это не должно выдавать ошибку ..

<%= truncate(nil, length: 120) %>

Итак, попробуйте <%= truncate(main_text, length: 120) %>

Похоже, вы пытаетесь использовать усечение Ruby вместо помощника вида Rails ... вот почему он выбрасывает undefined method 'truncate' for nil:NilClass.Но ... main_text по-прежнему ноль, что вам нужно будет выяснить, если это проблема.

Что касается рендеринга "#{title}" + " " + "#{main_text}", то, скорее всего, нет.Как и выше, вы можете сказать

"#{nil}" + " " + "#{nil}"

И он все равно будет отображать пустое пространство без ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...