- のUbuntu 16.04.1 LTS
- のRails 5.0.0
- ルビー2.3.1p112(2016年4月26日)[x86_64の-のlinux-gnuの]
- 宝石 'mysql2'、 '〜> 0.3.18'、:プラットフォーム=>:ルビー
- 宝石の思考 - スフィンクス '、 '〜> 3.2.0'
- のPostgreSQL 9.5.3
Iスフィンクスを設立する私のRails 5プロジェクトの検索エンジンとそれは(おそらく)accepts_nested_attributes_forメソッドを壊した。方法accepts_nested_attributes_for少なくともは私がGemfileにこれらの行を設定している場合にのみ機能します。accepts_nested_attributes_forスフィンクス考えるに依存(バグ?)
gem 'mysql2', '~> 0.3.18', :platform => :ruby
gem 'thinking-sphinx', '~> 3.2.0'
これらの行がなければ accepts_nested_attributes_for は動作しません!
私はHerokuのに私のプロジェクトをアップロードして、問題があまりにも起こっ:ネストされたモデルは、親の作成フォームを介して作成されていないことを意味し、「動作しない」(
1 error prohibited this user from being saved: Articles user must exist
私はエラーを取得します) - まったく同じ方法です(HerokuはSphinxを無料でサポートしていませんが)。
GitHubの私のテストプロジェクトはhttps://github.com/dorelly2/test-projectです。これは単なる足場生成のテストプロジェクトです。
私は2つの行(前述)がGemfileでコメントアウトされているかどうかによって異なる動作を示す2つのHerokuアプリケーションを作成しました。あなたはそれらと遊ぶことができ、見ることができます。両方のアプリケーションで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は、通常、Thinking Sphinxなしで動作しますか?
いいえ、役に立たなかったです。私はあなたの固定TSをインストールし、** accepts_nested_attributes_for **はそれを使用することを停止しました。私のソースコードをGitからダウンロードして、あなたのコンピュータにインストールしてください。 – prograils
バグが実際にどこにあるのでしょうか?accepts_nested_attributes_forまたはTSの内側にありますか? accepts_nested_attributes_forは一般的に動作しますか?TSがインストールされていないコンピュータでは意味がありますか? – prograils
明確にする:belongs_toアソシエーションはデフォルトで検証を追加するようになりました。これがエラーと関連しています。この動作を無効にすることができます: 'Rails.application.config.active_record.belongs_to_required_by_default = false' – pat