4

ダッシュボードページの上部に作成アクション(フォーム)を作成し、その下にリストアクションを作成したい...(作成されたすべての質問を表示するため)これを行うための最良の方法は何かと考えていました。

リストと作成アクションを備えたQuestionsControllerがあります。だから私はcreatelistアクションでDashboardControllerを作る必要があります...?そして、QuestionControllerから2つのテンプレートをレンダリングします...?

または、リストと質問モデルを参照するアクションの両方を使用してDashboardControllerを作成する必要がありますか?

よろしく、Thijs

4

2 に答える 2

3

フォームの一部をインデックスビューに含めて、QuestionsControllerを作成する必要があります。このフォームは、アクションを作成するために単純に従う必要があり、このアクションはエラー時に(検証エラーが発生する可能性があることを忘れないでください)インデックスアクションをレンダリングし、成功後、インデックスにリダイレクトする必要があります。

他の場所からも質問を作成する必要がない限り、それはより複雑です。

更新

DashboardsControllerを作成することもできますが、ダッシュボードを表示するためにのみ使用し(routes.rbのリソースではなく、アクションと単一のリソースを表示します)、通常は新しい質問フォームに従ってQuestoinsController#createに進み、DashboardsController#showにリダイレクトします。このように、ダッシュボードに複数のリソースタイプも表示する場合は、よりRESTfulです。これは、単一のダッシュボード(質問やその他のリソースを含む)を表示するためですが、QuestionsController#createに従ってQuestionを作成します。

更新2

あなた(または他の誰かが必要とする)が1つの場所でそれを作るために:

  1. routes.rbファイルでリソースを定義します。

    resources :questions
    
  2. あなたのQuestionController

    class QuestionsController < ApplicationController
      def index
        setup_questions
      end
    
      def create
        @question = Question.new(params[:question])
        if @question.save
          redirect questions_path, :notice => "Successfully created question."
        else
          setup_questions
          render :action => :index
        end
      end
    
      private
    
      def setup_questions
        @questions = Question.order(:name).page(params[:page])
        # or any other method to fetch all your questions
    
        @question ||= Question.new
      end
    end
    
  3. あなたのapp/views/questions/index.html.erb見解では:

    <% @questions.each do |question| %>
      <%# display question as table row %>
    <% end %>
    
    <% render :template => "form", :locals => {:question => @question} %>
    
  4. あなたの中でapp/views/questions/_form.html.erb、新しい質問のためのあなたの標準形を定義するだけです:

    <%= form_for question do |f| %>
      <%# form fields %>
    <% end %>
    

newこの場合、このアクションは新しい質問のフォームを表示するだけであり、このフォームが動作しているため、アクションのビューは必要ありませんindex

于 2011-07-12T08:22:37.937 に答える
1

たとえば、インデックスページでこの両方を組み合わせることができます。form_for(@question)ブロックとディスプレイコレクションを備えたビルドフォーム@questions。確かに、コントローラーのインデックスアクションを@question定義する必要があります。@questions

于 2011-07-12T08:23:52.463 に答える