неопределенная ошибка метода - PullRequest
1 голос
/ 05 февраля 2010

Я отредактировал это сообщение о неряшливости и изменениях.

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.books
book.id_num = room.id
book.save
end
end

Возвращает это сообщение об ошибке: неопределенный метод `id_num = '

Это потому, что в книгу передано более 1 книги?

Есть предложения? Благодарю.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2010

Предполагая, что Student имеет отношение has_many к Book, тогда @ student.books возвращает массив записей книги, поэтому вам потребуется следующее:

books = @student.books
books.each do |book|
  book.id_num = room.id
  book.save
end
1 голос
/ 05 февраля 2010

Что Руби пытается вам сказать, так это то, что у класса Book нет средства доступа для записи в атрибут id_num. Но так как кажется вероятным, что мы говорим об Active Record здесь, а Book фактически указывает на таблицу базы данных - я не хочу предлагать очевидное, но действительно ли id_num реальное поле в таблице books?

Конечно, ошибка Ruby может быть совершенно бесполезной, и происходит что-то еще.

Возможно, вы могли бы показать нам немного больше контекста? Где этот код живет? Какова структура данных? (О, и не желая быть грубым - пожалуйста, подумайте над отступом в вашем коде!)

1 голос
/ 05 февраля 2010

У вас ужасный нечитаемый стиль. Я попытался немного прояснить, что я мог.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...