我有两个模型,它们之间都有has_and_belongs_to_many
个关联。
顺序
class Order < ApplicationRecord
# Has multiple related rates.
has_and_belongs_to_many :rates
率
class Rate < ApplicationRecord
has_and_belongs_to_many :orders
费率包含给定日期的货币数据,而订单包含截止日期。我有一份工作,在订单截止日期之前,创建并获取(今天......下线) - 1年之间的所有日期。
工作
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
现在的问题是,对于我创建的第一个订单,一切运行顺利,关联正确,以便我可以通过@order.rates
访问费率。我创建的第二个和下一个订单不会这样做,尽管记录了以下内容,但只记录一次:
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]]
我在那里做错了什么?
编辑:
在orders_controller中调用作业:
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
答案 0 :(得分:0)
我从未见过r.update(orders << order_record)
我一直看到的语法是
r.orders << order_record
你也可以整理这个
r = Rate.find_by(date: date)
if r == nil
r = Rate.new(date: date)
r.save
end
到
r = Rate.find_or_create_by(date: date)