Создайте новую строку в другой таблице с изменением статуса в какой-либо другой таблице

#ruby-on-rails #ruby-on-rails-5

#ruby-on-rails #ruby-on-rails-5

Вопрос:

У меня есть таблица запросов со статусом в качестве поля в ней и таблица встреч. В поле Status отображается выпадающий список из таблицы status . Я хочу, чтобы при каждом изменении статуса в таблице encounter создавалась новая запись, которая хранит запись всех статусов для каждого запроса. Мне нужна рекомендация о том, как этого можно достичь.

request_form

 <%= form_for([@client, @request], local: true) do |form| %>
  <div class="field">
    <%= form.label :status_id %>
    <%= form.collection_select :status_id, Status.all, :status, :status, {prompt: "Select"}, autofocus:true %>
  </div>
<% end %>
  

столкнитесь со схемой таблицы

 create_table "encounters", force: :cascade do |t|
    t.integer "request_id"
    t.date "status_change_date"
    t.integer "admin_id"
    t.string "notes"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end
  

request.rb

 has_many :encounters
  

encounter.rb

 belongs_to :request
  

request.rb

 after_update :create_encounter
def create_encounter
    if self.changes.keys.include?(:status_id)?
      puts "updated"
    end
  end
  

Ответ №1:

По запросу.rb у вас есть знак ? в конце self.changes.keys.include?(:status_id)? , который выдает ошибку. Пусть это нравится self.changes.keys.include?(:status_id) .

Комментарии:

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

Ответ №2:

вы можете использовать обратный вызов модели rails

по запросу.rb

 after_update :create_encounter

def create_encounter
  if self.changes.keys.include?(:status_id)
   # your code to create encounter related to request
  end
  

завершение

Комментарии:

1. Я только что попробовал это, поместив в функцию «обновлено», но это выдает ошибку. неожиданный tSTRING_BEG, ожидающий keyword_do

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

3. неопределенный метод `changes’