2016-07-11 15 views
0

これは奇妙な質問かもしれませんが、題名を題名で伝えるのは難しいかもしれませんが、ここにあります:レコードを保存せずにActiveRecordモデル/コントローラを使用する方法の提案?

私は単純なRailsアプリケーションを持っています。ユーザーは関心のある情報を抽出するためのレポートを作成できます。「レポート」モデルがあり、検証が実行され、これらのレポートが保存されます。レポートが実行されると、レポートメソッドに@reportが送信され、情報が取得され、レンダリングされます。

しかし、レポートを保存しないアドホックレポート機能を作成したいと考えています。アプリはレポートパラメータを受け入れ、検証してすぐにレポートを実行し、保存せずにすみます。

これを行うには、既存の新しい/編集フォームを再利用しようとしました。@ report.new(report_params)を実行するad_hocメソッドを作成し、モデルバリデーションを呼び出してレンダリングしようとしました。 @reportを報告しています。私は少し進歩しますが、新しいロードブロッキングに走ります。

特定の問題に関するヘルプを探してコードを投稿する前に、この種の特別なレポートを作成するための最良の方法についてフィードバックを得たいと思っていました。助言がありますか?

私がしたい、要約すると:

  • は、開始日の前であることを確認すること(私が持っているモデルの検証を使用し
  • 私の新しい/編集フォームに同じに見えるアドホックフォームを持っています終了日など)
  • はすぐに検証/提出後のレポートの実行を持っている私は、いくつかのレポートは、アドホックとしてタグ付けされているハックバージョンを行うUIでそれらを隠して、RAを持つことができます知っている

これらのタスクを削除するなどですが、これにはエレガントなアプローチがありますか?彼らが有効な場合AR#valid?方法を検証し、レポートを実行しますので、これは動作するはず

#reports_controller.rb 
def adhoc_checker 
    @report = Report.new(report_params) 
    if @report.valid? 
    @report.run 
    # render it to view or something, redirect may not be your friend here because report isn't persisted 
    else 
    # inform the user that report isn't valid, send valid report 
    end 
end 

#report.rb 
def run 
    # perform the operations you want to perform here 
end 

:ここ

答えて

0

は、私は多分やるだろものです。このメソッドは、モデルが保存される前に実行されます。

はそれができますか他の明確化

+0

返信いただきありがとうございます。私はあなたが提案した方法を使用してかなり遠くになってきましたが、私が崩壊しているところはフォームの送信です。 Railsは、私のad_hocメソッドではなく、メソッドを "作成"することを望んでいます。ルートの調整、フォームを更新して何のURLやアクションを使用するかなどを大幅に改善しました。 、それを削除しようとしました!)。 – user2454099

+0

私がこれらの問題を抱えていて、別のフォームを完全に(多少なりとも私の他のものをコピーして)使う必要があるので、ad_hocの特定のアクションを指定しようとすると、私は正しいアプローチ。 – user2454099

+0

おそらく、私は必要性の美徳を作り、このユースケースを処理するためにCreateメソッドにロジックを追加する必要があります。うーん.... – user2454099

0

しかし、私は行方不明です。このエレガントなアプローチがある場合、私に教えてください?

はい、「アドホック」レポートであるかどうかに基づいて機能を切り替えるのは簡単です。

アドホックレポートのUXについて説明していません。チェックボックスがある場合は、次のような操作を行うことができます。

def create 
    if params[:ad_hoc] 
    ... 
    else 
    # send report to reporting method 
    end 
関連する問題