收到此错误 .. 不确定为什么? /mountains 处的 NoMethodError 未定义方法“有效?”对于 "big":字符串

Getting this error .. not sure why? NoMethodError at /mountains undefined method `valid?' for "big":String

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

ActiveRecord::Validationsvalid?方法实例方法,但我猜你是在String上调用的。您想要删除 name 之类的 @mountain.valid?

valid?ActiveRecord::Validations 提供的一种方法,它是在记录本身上调用的,但是你在 name (a String) return 来自 @mountain.name。只需在调用 valid?

之前删除 name
if @mountain.save && @mountain.valid?

此外,save 在实际尝试将记录保存到数据库之前在内部调用 valid?。而savereturnsfalse时记录无效。这意味着代码中的 && @mountain.name.valid? 部分不需要,只需将其从行中完全删除:

if @mountain.save