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
valid?
的ActiveRecord::Validations
方法实例方法,但是我想您是在String上调用它的。您要删除name
,例如@mountain.valid?
valid?
是ActiveRecord::Validations
提供的方法,它在记录本身上被调用,但是您可以在从ActiveRecord::Validations
返回的name
(String
)上调用它。只需在调用@mountain.name
]之前先删除name
valid?
此外,
if @mountain.save && @mountain.valid?
在实际尝试将记录保存到数据库之前在内部调用save
。当记录无效时,valid?
返回save
。这意味着不需要代码中的false
部分,只需将其从行中完全删除:
&& @mountain.name.valid?