Использование значений, возвращаемых «select» в ActiveRecord Rails 4 - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть две модели

class Shoot < ActiveRecord::Base
    has_many :questionnaires
end

class Questionnaire < ActiveRecord::Base
    belongs_to :shoot
end

Модели Shoot и Анкеты имеют оба атрибута с именем positive_feedback .

Я пытаюсь обновить атрибут positive_feedbackв съемке, используя значение, взятое из positive_feedback Анкеты. Только одна анкета в побегах имеет положительную обратную связь со значением.Остальное будет содержать ноль или пустое строковое значение.Поэтому в моем запросе меня не беспокоит наличие более одного вопросника за один снимок со значением в атрибуте positive_feedback

Я пытаюсь получить лучший подход, чем мой текущий.

Я делаю что-то вроде этого, но меня это не устраивает:

selected_values = Shoot.joins(:questionnaires).where.not(questionnaires: {positive_feedback: ['', nil]}).select('questionnaires.positive_feedback AS feedback', 'shoots.id')


selected_values.each do |selected_values|
     Shoot.find(selected_values.id).update_attribute(:positive_feedback, selected_values.feedback)
end

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

Есть предложения?Большое спасибо.

Редактировать

Часть schema.rb , относящаяся к этому:

...
create_table "shoots", force: true do |t|
    ...
    t.text     "positive_feedback"
    t.string   "status"
    t.datetime "created_at"
    t.datetime "updated_at"
    ...
end

...

create_table "questionnaires", force: true do |t|
    ...
    t.integer  "shoot_id"
    t.boolean  "enabled",          default: true
    t.text     "positive_feedback"
    t.datetime "created_at"
    t.datetime "updated_at"
    ...
end
add_index "questionnaires", ["shoot_id"], name: "index_questionnaires_on_shoot_id", using: :btree

Надеюсь этопомогает Прометей

Редактировать II

Спасибо, Макс, и извините, отношения между этими моделями немного шире, чем я показываю.Пытаясь уменьшить сложность дела, я написал несколько ошибок в своем первом редактировании.ТБХ имеет много связей, но я пытаюсь уменьшить сложность понимания.Я исправил предположения.В любом случае, я пытаюсь получить лишь способ оптимизировать запрос ActiveRecord, который я написал в начале.

...