我正在使用rails 4.1.6 我在创建新记录然后保存它们时遇到问题。以下是模型:
class Function < ActiveRecord::Base
belongs_to :theater
has_many :showtimes, dependent: :destroy
belongs_to :parsed_show
validates :theater, presence: :true
validates :date, presence: :true
end
class Theater < ActiveRecord::Base
has_many :functions, :dependent => :destroy
validates :name, :presence => :true
accepts_nested_attributes_for :functions
end
class Showtime < ActiveRecord::Base
belongs_to :function
validates :time, presence: true
validates :function, presence: true
end
showtime = Showtime.new time: Time.current
theater = Theater.first # read a Theater from the database
function = Function.new theater: theater, date: Date.current
function.showtimes << showtime
function.showtimes.count # => 0
为什么showtime没有添加到该功能的放映时间?我需要稍后使用放映时间保存该功能。
答案 0 :(得分:0)
您的Function
对象尚未保留。在将内容添加到放映时间列表之前,您需要确保它是持久的(当然这也要求它有效)。
尝试保存函数beorehand,如果成功(即function.persisted?
为true
),它应该允许您<<
直接进入function.showtimes
,就像你一样喜欢。或者,您可以使用Function#create
类方法而不是Function#new
类方法,因为前者会自动保留记录。
答案 1 :(得分:0)
您可以使用Function#create
theater = Theater.first # read a Theater from the database
function = Function.new theater: theater, date: Date.current
function.showtimes.create(time: Time.current)
答案 2 :(得分:0)
我忘了检查保存功能是否也保存了剧院,即使function.showtimes.count返回0,放映时也会保存到数据库中。
function.showtimes.count返回:
=> 0
但 function.showtimes返回:
=> #<ActiveRecord::Associations::CollectionProxy [#<Showtime id: nil, time: "2015-01-09 04:46:50", function_id: nil>]>