Логически ли я повторяю тот же блок кода в Ruby?

#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 с использованием заданных параметров. Если у вас не было этого первого блока кода, это могло бы установить одно из значений в пустую строку ( "" ).

Есть другие способы сделать это (в частности, проверки на уровне модели), но, надеюсь, это поможет вам понять, что здесь происходит.