0

在我的 Ruby on Rails 应用程序中,我正在创建一些数据并将其保存在 db 中,但现在我需要获取记录 id(保存时)。我需要获取此 id,并且对于此记录,在其他表中创建为此 id 绑定的记录数组(在模型中我有关联)。

  PriceList.create(:distributor_id => distributor_id, :brand => brand, :article_nr => num_catalog, :price => price, :quantity => quantity, :waittime => waittime)

class PriceList < ActiveRecord::Base
  has_many :cross_lists
  belongs_to :distributor
end




class CrossList < ActiveRecord::Base
  belongs_to :price_list
end

它可以看作是两个问题,但主要是第一部分。

4

2 回答 2

0

最简单的方法是设置

class PriceList < ActiveRecord::Base
  has_many :cross_lists
  accept_nested_attributes_for :cross_lists # <- this line
  belongs_to :distributor
end

然后在数组中传递 cross_lists 的数据。

PriceList.create(:distributor_id => distributor_id, 
                 :cross_lists_attributes => [
                   {...},
                   {...}
                 ]
                )

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

如果您手头没有关联的模型,也没有它们的属性,您可以在保存/创建主记录后即时创建它们。

@price_list = PriceList.create(...)
if @price_list.persisted?
  # now the @price_list object has an ID

  @price_list.cross_lists.create(...)
  # one CrossList record has been created, and its price_list_id
  # field has been automatically populated
end
于 2012-10-09T20:31:04.800 回答
0

为什么绑定到该 id 的记录数组不是您的价目表的集合?这样一来,一切都会自动完成,您无需担心。

class PriceList < ActiveRecord::Base

  ....
  has_many :records
end

class Record < ActiveRecord::Base

  belongs_to :price_list
end

现在您可以执行以下操作:

PriceList.create(:distributor_id => distributor_id, ....., :records => [Record.new, Record.new])

这对您来说更容易,因为您不必担心分配 id 和添加事务。ActiveRecord 会为您处理这些。

但是要回答您的第一个问题:在记录存储在数据库中之前,您没有 id。因此,您可以使用代码获取 id:

rec = PriceList.create(:distributor_id => distributor_id, :brand => brand, :article_nr => num_catalog, :price => price, :quantity => quantity, :waittime => waittime)
rec.id #=> returns the id from db
于 2012-10-09T19:21:13.580 回答