JavaScript: Бросок Math.sqrt к интервалу?

Profile.find_by возвращает nil, то есть: пользователь не найден. Итак, когда вы пытаетесь @profile.user, вы пытаетесь получить доступ к user на nil.

Убедитесь, что профиль существует с user_id, совпадающим с params[:id], и что params[:id] не является пустым или нулевым.

Чтобы избавиться от фатальной ошибки, нужно проверить, является ли @profile нулем или нет, прежде чем использовать его:

def update
  @profile = Profile.find_by(user_id: params[:id])
  if @profile.present? 
    if @profile.user == current_user
      @profile.update(profile_params) 
      flash[:info] = "Profile successfully updated" 
    else
    end
  else
    # Profile not found
  end
end

Или, вы можете использовать вариацию взрыва find_by:

Profile.find_by!

Который вызовет исключение, если ничего не будет найдено (из которого вы затем сможете спасти)

12
задан Chris Ballance 1 February 2009 в 14:20
поделиться

3 ответа

Использовать Math.round, Math.ceil, или Math.floor в зависимости от Ваших определенных потребностей округления.

"Для округления чисел к целым числам один из Math.round, Math.ceil и Math.floor предпочтителен, и для желаемого результата, который может быть выражен как целое число со знаком на 32 бита, которому ниже могла бы также удовлетворить битовая операция, описанная".

-http://www.jibbering.com/faq/faq_notes/type_convert.html#tcNumber

24
ответ дан 2 December 2019 в 04:03
поделиться

Кто-то предложил parseInt. Это идет от строки до интервала, но легко превратить плавание в строку.

parseInt(Math.sqrt(num)+"")

Помните, что независимо от того, что Вы делаете, JavaScript всегда использует плавания. Нет никакого целого типа.

5
ответ дан 2 December 2019 в 04:03
поделиться

Math.floor сделает это. Сомневайтесь, что даже необходимо перейти к целому числу, все же.

Math.floor(Math.sqrt(num));
4
ответ дан 2 December 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: