2016-08-26 2 views
0
  • Ubuntu 16.04.1 LTS
  • Rails 5.0.0
  • рубин 2.3.1p112 (2016-04-26) [x86_64-Linux-гну]
  • драгоценный камень 'mysql2', '~> 0.3.18': платформа =>: рубин
  • камень 'мышление-сфинкс', '~> 3.2.0'
  • PostgreSQL 9.5.3

I создать Сфинкс поисковой системы в моем проекте Rails 5, и он (вероятно) разбил Rails accepts_nested_attributes_for. По крайней мере accepts_nested_attributes_for метод работает только если я изложу эти строки в Gemfile:accepts_nested_attributes_for зависит от Thinking Sphinx (ошибка?)

gem 'mysql2',   '~> 0.3.18', :platform => :ruby 
gem 'thinking-sphinx', '~> 3.2.0' 

Без этих линий accepts_nested_attributes_for не работает! «Не работает» означает, что вложенная модель не создается через форму создания родителя (я получаю ошибку:

1 error prohibited this user from being saved: Articles user must exist

)

Я загрузил свой проект Heroku и проблема там произошло слишком - точно так же (даже несмотря на то, что Heroku не поддерживает Sphinx бесплатно).

Вот мой тестовый проект на GitHub: https://github.com/dorelly2/test-project. Это всего лишь проект, созданный с помощью лесов.

Я сделал 2 приложения Heroku, которые демонстрируют различное поведение, зависящее от того, отмечены ли 2 строки (упомянутые выше) или нет в Gemfile. Вы можете поиграть с ними и посмотреть. Попробуйте создать пользователя с Name и Article title в обоих приложениях, и вы увидите разницу:

https://test-project-ts.herokuapp.com/

https://test-project-ts-bad.herokuapp.com/

Ниже приведены примеры кода:

class User < ApplicationRecord 
    has_many :articles, dependent: :destroy 
    accepts_nested_attributes_for :articles 
end 

class Article < ApplicationRecord 
    belongs_to :user 
end 

вид:

<%= form_for(user) do |f| %> 
... 

    <div class="field"> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    </div> 

    <%= f.fields_for :articles, Article.new do |ff| %> 
    <div class="field"> 
     <%= ff.label "Article title" %> 
     <%= ff.text_field :title %> 
    </div> 
    <% end %> 
... 

Контроллеры генерируются эшафотом - нет смысла показывать их здесь.

Что происходит? Может кто-нибудь очистить? Делает ли accepts_nested_attributes_for вообще работает без мышления Sphinx?

ответ

1

Это на самом деле изменение в поведении в Rails/ActiveRecord 5.0, а ошибка в Thinking Sphinx перестала работать: belongs_to ассоциации по умолчанию имеют проверку на месте.

Исправлена ​​ошибка в TS, хотя новая версия еще не выпущена с этим исправлением. Подробно здесь: Thinking-spinx breaks belongs_to built-in validation

+0

Нет, это не помогло.Я установил фиксированные TS и ** accepts_nested_attributes_for ** даже остановился для работы с ним. Не могли бы вы скачать мои исходные коды (от Git) и ckeck их на вашем компьютере? – prograils

+0

Интересно, где на самом деле находится ошибка - внутри accepts_nested_attributes_for или внутри TS? Does accepts_nested_attributes_for вообще работает сам - я имею в виду на компьютере, где TS никогда не был установлен? – prograils

+0

Просто, чтобы быть ясным: ассоциация belongs_to теперь добавляет проверку по умолчанию, и с этим связана ошибка. Вы можете отключить это поведение, если хотите: 'Rails.application.config.active_record.belongs_to_required_by_default = false' – pat

 Смежные вопросы

  • Нет связанных вопросов^_^