#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’