web-dev-qa-db-ja.com

Rails 4メソッドによる検索または作成が機能しない

仕事と企業の間には1対多の関係があり、うまく機能しています。求人フォームビューには、オートコンプリート機能を備えた会社名のtext_fieldがあります。オートコンプリートは正常に機能しますが、オートコンプリートリストに存在しない会社名を入力した場合、find_or_create_byは新しい会社を作成しません。

  def company_name
    company.try(:name)
  end

  def company_name=(name)
    @company = Company.find_or_create_by(name: name)
  end
52
userails

この回答 をご覧ください。

かつては

@company = Company.find_or_create_by_name(name)

in Rails 4は今

@company = Company.find_or_create_by(name: name)

Rails 4でこれを行う別の方法は次のとおりです。

@company = Company.where(name: name).first_or_create
110
eronisko
Company.find_or_create_by(name: name)

すぐに使えるはずです。レコードの作成を妨げることができるのは、検証エラーだけです。

Rails console動作するかどうかを確認します。また、検証エラーも確認してください。

name = "YOUR TEXT FOR NAME ATTRIBUTE"
c = Company.find_or_create_by(name: name)
puts c.errors.full_messages
24

このメソッドは、Rails 4。

Rails4リリースメッセージ:

古いスタイルのハッシュベースのFinder APIを廃止しました。これは、以前は「Finderオプション」を受け入れていたメソッドが実行しないことを意味します。

非推奨のメソッドですが、動作するはずです。たぶん、Railsは現在サポートしていません。

詳細情報を取得できます ここをクリック および11.2 Deprecations

0
uma