2015-12-14 4 views
0

Изначально я был <%= @place.vicinity ||= @place.location.display_address[0] %> но бросил ошибказначения по умолчанию не работает Ruby On Rails

неопределенный метод `окрестности» для < BurstStruct :: Burst: 0x00000006126ff0>

Я попытался с только || также и с @place.vicinity.present? также, но такая же ошибка. Когда я получаю echo, мой @place.location.display_address[0], он присутствует. поэтому я подумал, что может объясняться отсутствием присутствия vicinity члена в классе он бросает ошибку (несмотря на то я опробовал его с nil? оператором также), то я попробовал ternary oprator, как показано ниже, и все ту же ошибка:/
<%= @place.vicinity.nil? ? @place.location.display_address[0] :@place.vicinity %>
любая помощь и предложения будут оценены

Update
что я делаю на самом деле, что, когда я звоню на визг он возвращает мне местоположение и, когда я называю Google я не вернусь «окрестности» - так что никаких классов

Контроллер

def index 
    phone_number =params["phone_number"] 
    if params["provider"] == 'GOOGLE' 
    client = GooglePlaces::Client.new("Qf4D-GJpap09o") 
    @place = client.spot(params["place_id"]) 
    elsif params["provider"] == 'yelp' 
    yelp_client = Yelp::client 
    @place = yelp_client.business(params["place_id"]) 
    end 
end 
+0

напишите свой код метода 'near'. Вы определили его? –

+0

Это динамический член '@ place' – ImranNaqvi

+0

Не могли бы вы обновить свой вопрос с помощью структуры' BurstStruct :: Burst'? Спасибо – NickGnd

ответ

3

ошибка происходит из-за недостающую методу экземпляра vicinity для объекта @place.

@place.vicinity сделать исключение раньше, поэтому оператор || или метод .nil? не выполняются.

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

klass.try(:vicinity) 

Он проверяет наличие метода и выполнить его, если существует, то otherwhise возвращает nil если это не так.

Ссылки: http://apidock.com/rails/Object/try

+0

Я знаю, но то, что использует 'nil?' Или '||' operator – ImranNaqvi

+0

, вы имеете в виду '@ place.vicinity.nil?', Не сработает? затем укажите способ, которым мы можем проверить его 'nil' – ImranNaqvi

+0

@ImranNaqvi. Я только что обновил свой ответ. – NickGnd

1

Над ответом от NickGnd выглядит хорошо, но просто хотел бросить в том, что || является более подходящим, чем ||= здесь для значения по умолчанию. ||= также имеет переменное назначение, то есть если @place.vicinity возвращает нуль, #vicinity= (сеттер/мутатор) также должен быть методом, известным @place. И помимо этого (я предполагаю, что на основе тегов ERB, что это в представлении), вы обычно хотите выполнять назначение переменных в контроллере до визуализации представления.

Смежные вопросы