#ruby #activerecord #sinatra
#ruby #activerecord #синатра
Вопрос:
В чем разница между этими двумя строками кода Ruby?
if params.values.any? { |value| value == "" }
и
@post = current_user.posts.build(title: params[:post][:title], content: params[:post][:content])
Контексты, в которых они используются, следующие соответственно:
post '/builds' do
redirect_if_not_logged_in
if params.values.any? {|value| value == ""}
erb :'builds/new', #locals: {message: "Unable to Continue!"}
else
user = User.find(session[:user_id])
@build = Build.create(title: params[:title], budget: params[:budget], user_id: params[:user.id])
redirect to "/builds/#{@build.id}"
end
end
и
post "/builds" do
redirect_if_not_logged_in
@build = current_user.builds.build(title: params[:post][:title], content: params[:build][:content])
if @build.save
redirect "/builds"
else
erb :"/builds/new.html"
end
end
Комментарии:
1. Вы имеете в виду, кроме этих двух строк, не имеющих в принципе ничего общего? Я не уверен, о чем вы здесь спрашиваете. Почему у вас есть два обработчика для одного и того же пути?
2. я практикую написание одного и того же кода по-разному,
3. Я не уверен, о чем вы спрашиваете. Эти две строки настолько совершенно разные, что я даже не могу начать находить способы, которыми они похожи.
4. ладно, поблагодари меня за то, что я ошибаюсь. Вы успешно ответили на него
5. Надеюсь, это помогло? Этот код Ruby выглядит нормально, но я не уверен, в чем сходство между блоками, кроме того, что они оба призваны отвечать
/builds
.
Ответ №1:
if params.values.any? {|value| value == ""}
erb :'builds/new', #locals: {message: "Unable to Continue!"}
То, что вы здесь делаете, возвращает сообщение об ошибке, если какое-либо из значений параметра пустое. Это может произойти, если пользователь не заполнил одно из полей формы на странице.
@post = current_user.posts.build(title: params[:post][:title], content: params[:post][:content])
Это создает новый объект post с использованием заданных параметров. Если у вас не было этого первого блока кода, это могло бы установить одно из значений в пустую строку ( ""
).
Есть другие способы сделать это (в частности, проверки на уровне модели), но, надеюсь, это поможет вам понять, что здесь происходит.