1

find_by_pathこの方法はより良い解決策かもしれないと言われましたwhere

移行ファイルにこのスニペットがあります...

prescriber_activity_request = InsightReportMenuItem.where(name: "Prescriber Activity With Patient").first

私はレールが初めてです。私の質問は、find_by_pathここで使用できる場合、パスはどのように見えるかということです。

データベースがそのパスをどのように構造化するかについて、私は混乱していると思います。

4

1 に答える 1

1

それは、データベースから何が必要かによって異なります。.where を呼び出すと、常に nil 以外の結果が得られます (条件に一致するものが見つからない場合、空の配列になります)。

あなたの場合、空の配列で .first を呼び出すとエラーが発生するため、何も見つからない場合は nil エラーが発生します。

単一のレコードの存在を確認している場合、

find_by_name('Prescriber Activity With Patient')

...あなたのfind_byパスです。だからあなたはこのようなことをすることができます

if @irmi = InsightReportMenuItem.find_by_name( "Prescriber Activity With Patient")
  #redirect to insight_report_menu_item_path(@irmi) or whatever
else
  #redirect_to root_path or whatever
end

.where を使用している場合は、.any? を使用できます。そして、.first if .any? を呼び出します。true を返します。それが役立つことを願っています。記録として、find_by_(InsightReportMenuItem テーブルの任意の属性) を実行できます。例えば:

InsightReportMenuItem.find_by_id(1)

テーブルの最初のものを生成します。

于 2015-07-06T21:04:38.553 に答える