1

Я использую рельсы 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 

Почему показ не добавляется в сеансы работы функции? Мне нужно сохранить функцию позже с помощью сеансов с ней.

ответ

0

Ваш объект Function не был сохранен. Вы должны убедиться, что он сохраняется (что, конечно же, также требует, чтобы он был действительным), прежде чем вы сможете добавлять вещи в свой список сеансов.

Попробуйте сохранить функцию beorehand, и если это удастся (то есть, если function.persisted? является true), она должна позволить вам << непосредственно в function.showtimes, как вам нравится. Кроме того, вы можете использовать метод класса Function#create вместо метода класса Function#new, поскольку первый автоматически сохраняет запись.

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) 
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>]>