Получение этой ошибки .. не уверен, почему? NoMethodError в / Mountains неопределенный метод `valid? ' для "большой": строка - PullRequest
0 голосов
/ 23 февраля 2020
post '/mountains' do
  @mountain = Mountain.find_or_create_by(
    name: params[:name].strip, 
    content: params[:content].strip, 
    user_id: current_user.id
  )

  if @mountain.save && @mountain.name.valid?
    redirect to "/mountains/#{@mountain.id}"
  else
    redirect to '/mountains/new'
  end
end

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

valid? - это метод, предоставляемый ActiveRecord::Validations, и он вызывается для самой записи, но вы вызываете его для name (a String) возврата из @mountain.name. Просто удалите name перед вызовом valid?

if @mountain.save && @mountain.valid?

Кроме того, save вызывает valid? внутри, прежде чем попытаться сохранить запись в базе данных. И save возвращает false, когда запись недействительна. Это означает, что часть && @mountain.name.valid? в вашем коде не нужна, просто полностью удалите ее из строки:

if @mountain.save
1 голос
/ 23 февраля 2020

Метод экземпляра valid? метода ActiveRecord::Validations, но я полагаю, вы вызываете его в строке. Вы хотите удалить name как @mountain.valid?

...