У вас ужасный нечитаемый стиль. Я попытался немного прояснить, что я мог.
def student_test
@student = Student.for_test.find(params[:id]) if params[:id]
@student ||= Student.new
run_sequence :testize
end
def test_finalize
Student.transaction do
if (params[:student]) and @student.update_attributes(params[:student])
@student.test!
end
room = Room.new(:room_num => 5)
room.save
book = @student.book
book.id_num = room.id
book.save
end
end
Ваша основная проблема заключалась в том, что именованные области видимости похожи на искатели - вы не пишете @student.find(:first)
, а пишете Student.find(:first)
. То же самое и здесь - именованная область предназначена для извлечения объекта из БД, для добавления условий и отдыха к запросу. И затем вы вызываете искатель, чтобы получить нужные объекты, которые.
Я не знаю поток вашей программы, но я полагаю, что test_finalize запускается из student_test, поэтому он может использовать @ student.