4

我想制作一个仪表板页面,顶部有一个创建操作(表单),下面有一个列表操作......(显示所有已提出的问题)我想知道最好的方法是什么。

我有一个带有列表和创建操作的 QuestionsController。所以我确实需要用 createlist 操作制作一个 DashboardController ......?并从 QuestionController 渲染两个模板...?

或者我是否需要使用列表创建一个 DashboardController 并参考 Questions 模型在它们上创建操作?

最好的问候, Thijs

4

2 回答 2

3

您应该创建 QuestionsController,将表单部分包含在索引视图中。这个表单应该简单地跟随创建动作,并且这个动作应该在错误时(记住可能存在验证错误)呈现索引动作,并且在成功后它应该重定向回索引。

除非您还需要从其他地方创建问题,否则它会更复杂。

更新

您也可以创建 DashboardsController,但我只会使用它来显示仪表板(显示操作和单一资源,而不是 routes.rb 中的资源),然后通常按照新问题表单到 QuestoinsController#create,然后重定向回 DashboardsController#show。这样,如果您还在仪表板上显示多个资源类型,则更加 RESTful,因为您显示单个仪表板(带有问题和其他资源),但您遵循 QuestionsController#create 来创建问题。

更新 2

如果您(或其他任何人需要)将其放在一个地方:

  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 回答