Ich habe zwei Modelle, die beide die has_and_belongs_to_many
Assoziation miteinander haben.Schienen 5 Active Record has_and_belongs_to_many
Bestellen
class Order < ApplicationRecord
# Has multiple related rates.
has_and_belongs_to_many :rates
Rate
class Rate < ApplicationRecord
has_and_belongs_to_many :orders
Rate Währungsdaten für ein bestimmtes Datum enthält, während um eine Frist enthält. Ich habe eine Arbeit, die eine Frist des Auftrags gibt, schafft und holt alle Daten zwischen (heute..deadline) - 1 Jahr.
Job
def perform(order_record)
(all_dates << history_weeks).flatten!
all_dates.each do |date|
r = Rate.find_by(date: date)
if r == nil
r = Rate.new(date: date)
r.save
end
q = r.update(orders << order_record)
end
Jetzt ist die Sache, die für die erste Bestellung, dass ich schaffen, alles reibungslos läuft, sind die Verbände richtig gemacht, so dass ich die Preise durch @order.rates
zugreifen kann. 2. und jede weitere damit ich schaffen macht das nicht, trotz der folgenden Anmeldung, aber nur einmal:
Rate Load (0.0ms) SELECT "rates".* FROM "rates" INNER JOIN "orders_rates" ON "rates"."id" = "orders_rates"."rate_id" WHERE "orders_rates"."order_id" = ? ORDER BY "rates"."id" ASC LIMIT ? [["order_id", 4], ["LIMIT", 1]]
Was mache ich da falsch gemacht?
Edit:
Der Job in der orders_controller aufgerufen:
def create
@order = Order.new(order_params)
@order.user = User.find(current_user)
respond_to do |format|
if @order.save
GetCurrencyHistoryJob.perform_now(@order)
format.html { redirect_to @order, notice: 'Order was successfully created.' }
format.json { render :show, status: :created, location: @order }
else
format.html { render :new }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
Können Sie nach dem Code, wo Sie den Job –