Rails запрашивает базу данных и сохраняет в переменной в контроллере - PullRequest
0 голосов
/ 26 февраля 2019

Я читал документацию в руководствах по рельсам и не могу найти ответ, как это сделать.

Я хочу иметь возможность запросить определенный столбец в моей модели и сохранить егов переменную.я думаю, что лучшее, что я могу сделать, это написать запрос SQL, чтобы объяснить это.

Вот мое определение контроллера

  def upvote
    @request = Request.find(params[:request_id]) # Do you still need this ?


    @requestID = Request.find(params[:id])
    @requestEmail = Request.where(id: @requestID).select(:email)


    @request.email = current_user.email
    @requestNewEmail = @request.email + ', ' +  @requestEmail
    @request.email = @requestNewEmail

    @request.increment!(:voteCount)
    @request.save
    render json: { voteCount: @request.voteCount , email: @request.email}
  end 

Вот что я хотел бы выполнить:

SELECT email FROM requests WHERE id = requestID

Все, что я пробовал, либо возвращает ошибку Couldn't find Request without an ID

Или no implicit conversion from Request to string

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете создать метод в модели запроса и использовать его в действии контроллера

# app/models/request.rb
def add_email(new_email)
  update(email: email + ', ' + new_email)
end

# controller/requests_controller.rb
def upvote
  @request = Request.find(params[:request_id]) 
  @request.add_email(current_user.email)
end
0 голосов
/ 26 февраля 2019

ПРИМЕЧАНИЕ. Публикация в качестве ответа, так как места для комментариев будет недостаточно.Это может быть улучшено за счет лучшего понимания требований.

Ошибка no implicit conversion from Request to string возникает, когда мы пытаемся объединить @requestEmail со строкой.Эта строка, чтобы быть точной:

@requestNewEmail = @request.email + ', ' +  @requestEmail

Это потому, что мы выбираем @requestEmail, используя этот запрос:

@requestEmail = Request.where(id: @requestID).select(:email)

Это значит, что он возвращает ActiveRecord::Relation объект.Что-то вроде #<ActiveRecord::Relation [#<Request id: nil, email: <some_email>>]>.Это массив, и мы могли бы извлечь из него первое электронное письмо, используя @requestEmail.first.email, а затем объединить его со строкой.
Однако в вашем коде вы уже получили нужную запись как

@requestID = Request.find(params[:id])

Это можно использовать для получения требуемого значения электронной почты вместо повторного вызова БД.То есть, сам по себе @requestID.email даст вам значение, которое вы пытаетесь получить, используя @requestEmail = Request.where(id: @requestID).select(:email)
. Я думаю, что весь код может быть упрощен, если требования немного яснее.Может быть, вы могли бы объяснить подробно, что пытается быть достигнуто?Этот текущий ответ, вероятно, устранит ошибку, но я полагаю, что может быть лучший способ удовлетворить ваши требования, поскольку весь этот блок выглядит немного не так.
Пожалуйста, не стесняйтесь комментировать, объясняя более подробную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...