- 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?
Нет, это не помогло.Я установил фиксированные TS и ** accepts_nested_attributes_for ** даже остановился для работы с ним. Не могли бы вы скачать мои исходные коды (от Git) и ckeck их на вашем компьютере? – prograils
Интересно, где на самом деле находится ошибка - внутри accepts_nested_attributes_for или внутри TS? Does accepts_nested_attributes_for вообще работает сам - я имею в виду на компьютере, где TS никогда не был установлен? – prograils
Просто, чтобы быть ясным: ассоциация belongs_to теперь добавляет проверку по умолчанию, и с этим связана ошибка. Вы можете отключить это поведение, если хотите: 'Rails.application.config.active_record.belongs_to_required_by_default = false' – pat