неопределенный метод "синхронизировать" для nil:NilClass

Я только что создал новое приложение с нуля на rails4.0.0.rc1 с 1.9.3-p374 (которое должно работать в соответствии с руководствами).

Однако я не могу выполнить простое действие create.

class Books
  def create
    @book = Book.new book_params

    if @book.save
      redirect_to @book
    else
      render action: :new
    end
  end

  private

  def book_params
    params.require(:book).permit(:name, :description)
  end
end

Создание здесь приводит к

undefined method `synchronize' for nil:NilClass

с ошибкой, указывающей на строку if @book.save.

Это из-за 1.9.3 или я что-то пропустил?


person pdu    schedule 03.05.2013    source источник
comment
Вы можете отлаживать или регистрировать @book, чтобы убедиться, что он инициализирован правильно?   -  person Jakob W    schedule 03.05.2013
comment
@bookв порядке. По-видимому, это происходит только тогда, когда в модели есть проверка уникальности. Я сообщил об ошибке (github.com/rails/rails/issues/10454)   -  person pdu    schedule 04.05.2013
comment
Я был неправ, проблема в том, что при присвоении ассоциации пустого массива, например @book.genre_ids = [].   -  person pdu    schedule 04.05.2013
comment
Хорошо, это может быть полезно знать =)   -  person Jakob W    schedule 04.05.2013
comment
Я столкнулся с этой ошибкой, когда пытался что-то сделать со всеми классами моделей, но непреднамеренно попытался сделать это и с одноэлементным классом класса модели. Это например. имеет метод #attribute_names, но попытка вызвать его приведет к этой ошибке.   -  person Confusion    schedule 24.12.2020


Ответы (2)


По-видимому, он не работал из-за драгоценного камня friendlyId. Если вы используете friendlyId, вам может потребоваться указать ветку rails4.

gem 'friendly_id', github: 'FriendlyId/friendly_id', branch: 'rails4'

изменить: убедитесь, что вы получили актуальную ветку/версию из norman/friendly_id. Согласно ридми, для работы с rails4 требуется не менее branch: 5.0.0-beta.

edit2: теперь это 5.0.0.rc2, как я уже сказал, убедитесь, что вы получили актуальную ветку/версию, очевидно, я не буду обновлять этот ответ каждый раз при обновлении версии . Кроме того, прочитайте комментарии к этому ответу, там много полезной информации.

person pdu    schedule 06.05.2013
comment
Проблемы с развертыванием с этой конфигурацией; вот суть ошибки: gist.github.com/bbnnt/6261095 / если есть доказательства того, почему это происходит, это было бы здорово! - person Ben; 18.08.2013
comment
Ага, было и такое. Ветвь поменялась. Используйте github: norman/friendly_id и соответствующую ветку. В настоящее время существует версия «5.0.0.beta», которая также требует некоторых обновлений вашего контроллера или модели. См. github.com/norman/friendly_id#what-changed-in-version. -50 - person pdu; 27.08.2013
comment
Получил это с тех пор, спасибо! Теперь другая проблема; они говорят, что средства поиска в стиле FriendlyId 4 все еще можно использовать, добавив спецификацию (где-то в начале их Что изменилось в версии 5.0 на странице github). Проблема в том, что это не работает. На востоке на моей стороне. Пришлось добавить Model.friendly.something… везде - person Ben; 27.08.2013
comment
то же самое здесь, посмотрите на проблемы и / или сообщите о них. - person pdu; 27.08.2013
comment
Я предполагаю, что они могут работать над новой версией, поскольку рельсы 4, как правило, более широко используются ... во всяком случае, надеюсь на это; добавлять дружественные везде не так уж и круто - person Ben; 28.08.2013

ответ pduersteler у меня не сработал и не сработал с этой ошибкой:

fatal: ambiguous argument 'rails4': unknown revision or path not in the working tree.

README был обновлен 23 сентября 2013 г. со следующим: без ошибок:

gem 'friendly_id', '5.0.0.rc2' # Note: You MUST use 5.0.0 or greater for Rails 4.0+
person David    schedule 02.10.2013
comment
Вы не читали редактирование и комментарии, потому что это то, что я там написал ;) - person pdu; 03.10.2013
comment
Спасибо, извините за это, это все новое для меня :) (и торопился) - person David; 03.10.2013