フォームの一部をインデックスビューに含めて、QuestionsControllerを作成する必要があります。このフォームは、アクションを作成するために単純に従う必要があり、このアクションはエラー時に(検証エラーが発生する可能性があることを忘れないでください)インデックスアクションをレンダリングし、成功後、インデックスにリダイレクトする必要があります。
他の場所からも質問を作成する必要がない限り、それはより複雑です。
更新:
DashboardsControllerを作成することもできますが、ダッシュボードを表示するためにのみ使用し(routes.rbのリソースではなく、アクションと単一のリソースを表示します)、通常は新しい質問フォームに従ってQuestoinsController#createに進み、DashboardsController#showにリダイレクトします。このように、ダッシュボードに複数のリソースタイプも表示する場合は、よりRESTfulです。これは、単一のダッシュボード(質問やその他のリソースを含む)を表示するためですが、QuestionsController#createに従ってQuestionを作成します。
更新2:
あなた(または他の誰かが必要とする)が1つの場所でそれを作るために:
routes.rb
ファイルでリソースを定義します。
resources :questions
あなたの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
あなたのapp/views/questions/index.html.erb
見解では:
<% @questions.each do |question| %>
<%# display question as table row %>
<% end %>
<% render :template => "form", :locals => {:question => @question} %>
あなたの中でapp/views/questions/_form.html.erb
、新しい質問のためのあなたの標準形を定義するだけです:
<%= form_for question do |f| %>
<%# form fields %>
<% end %>
new
この場合、このアクションは新しい質問のフォームを表示するだけであり、このフォームが動作しているため、アクションのビューは必要ありませんindex
。