2016-08-26 13 views
0
  • の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アプリケーションを作成しました。あなたはそれらと遊ぶことができ、見ることができます。両方のアプリケーションでNameArticle 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なしで動作しますか?

答えて

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からダウンロードして、あなたのコンピュータにインストールしてください。 – prograils

+0

バグが実際にどこにあるのでしょうか?accepts_nested_attributes_forまたはTSの内側にありますか? accepts_nested_attributes_forは一般的に動作しますか?TSがインストールされていないコンピュータでは意味がありますか? – prograils

+0

明確にする:belongs_toアソシエーションはデフォルトで検証を追加するようになりました。これがエラーと関連しています。この動作を無効にすることができます: 'Rails.application.config.active_record.belongs_to_required_by_default = false' – pat

関連する問題