【问题标题】:Rails 5 Active Record has_and_belongs_to_manyRails 5 Active Record has_and_belongs_to_many
【发布时间】:2016-05-10 20:29:56
【问题描述】:

我有两个模型,它们都具有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

Rate 包含给定日期的货币数据,而 order 包含截止日期。我有一份工作,给定订单的截止日期,创建并获取 (today..deadline) - 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

【问题讨论】:

  • 你能把代码贴在你调用工作的地方吗

标签: ruby-on-rails


【解决方案1】:

我从未见过r.update(orders &lt;&lt; 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)

【讨论】:

  • r.orders &lt;&lt; order_record 产生完全相同的结果:第一个运行良好,下一个则不行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2011-10-15
  • 2017-10-14
  • 2018-01-14
相关资源
最近更新 更多