Как вернуть значения по умолчанию с необязательными частями - PullRequest
0 голосов
/ 13 мая 2018

У меня есть конечная точка RESTful, которая использует следующий шаблон jbuilder:

json.extract! tab_community, :id, :name, :ref_community_type_id, :created_at, :updated_at, :num_of_accounts, :platform_name
json.url tab_community_url(tab_community, format: :json)

Есть ли какой-то способ для меня иметь необязательные частичные значения :num_of_accounts и :platform_name по умолчанию для некоторого значения, если модель не 't вернуть эти значения?

ОБНОВЛЕНИЕ: Я попытался добавить это в мой файл шаблона:

if tab_community.num_of_accounts.nil?
  json.extract! tab_community, :id, :name, :ref_community_type_id, :created_at, :updated_at, num_of_accounts: 0, platform_name: 'Twitter'
else
  json.extract! tab_community, :id, :name, :ref_community_type_id, :created_at, :updated_at, :num_of_accounts, :platform_name
end
json.url tab_community_url(tab_community, format: :json)

И вот моя ошибка сервера Rails: msg:

ActionView::Template::Error (undefined method `num_of_accounts' for #<TabCommunity:0x0000000be66f08>):
    1: if tab_community.num_of_accounts.nil?
    2:   json.extract! tab_community, :id, :name, :ref_community_type_id, :created_at, :updated_at, num_of_accounts: 0, platform_name: 'Twitter'
    3: else
    4:   json.extract! tab_community, :id, :name, :ref_community_type_id, :created_at, :updated_at, :num_of_accounts, :platform_name

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Два предыдущих ответа очень, очень близки. Помимо необходимости использования условия, мне также нужно было правильно обрабатывать нулевые методы, и правильный способ проверить, существуют ли методы AR, - это использовать .respond_to?:

json.extract! tab_community, :id, :name, :ref_community_type_id, :created_at, :updated_at
json.url tab_community_url(tab_community, format: :json)

if tab_community.respond_to? :num_of_accounts
  json.num_of_accounts tab_community.num_of_accounts
else
  json.set! :num_of_accounts, 0
end
if tab_community.respond_to? :platform_name
  json.platform_name tab_community.platform_name
else
  json.set! :platform_name, 'Twitter'
end
0 голосов
/ 13 мая 2018

Вы можете добавить if/else условие:

json.extract! tab_community, :id, :name, :ref_community_type_id, :created_at, :updated_at
json.url tab_community_url(tab_community, format: :json)

if tab_community.num_of_accounts.present?
  json.num_of_accounts tab_community.num_of_accounts
else
  json.set! :num_of_accounts, 'Default value'
end
if tab_community.platform_name.present?
  json.platform_name tab_community.platform_name
else
  json.set! :platform_name, 'Default value'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...