您应该创建 QuestionsController,将表单部分包含在索引视图中。这个表单应该简单地跟随创建动作,并且这个动作应该在错误时(记住可能存在验证错误)呈现索引动作,并且在成功后它应该重定向回索引。
除非您还需要从其他地方创建问题,否则它会更复杂。
更新:
您也可以创建 DashboardsController,但我只会使用它来显示仪表板(显示操作和单一资源,而不是 routes.rb 中的资源),然后通常按照新问题表单到 QuestoinsController#create,然后重定向回 DashboardsController#show。这样,如果您还在仪表板上显示多个资源类型,则更加 RESTful,因为您显示单个仪表板(带有问题和其他资源),但您遵循 QuestionsController#create 来创建问题。
更新 2:
如果您(或其他任何人需要)将其放在一个地方:
在您的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
。