Перечислите и создайте на одной странице рельсы 3 - PullRequest
4 голосов
/ 12 июля 2011

Я хочу сделать страницу панели инструментов с сверху действием создания (формой) и под ним действием списка ... (чтобы отобразить все вопросы, которые были заданы). .

У меня есть QuestionController со списком и действием создания. Так что мне нужно сделать DashboardController с действием createlist ...? И там рендерит два шаблона из QuestionController ...?

Или мне нужно создать DashboardController с обоими списками и создать над ними действия, относящиеся к модели вопросов?

С уважением, Thijs

Ответы [ 2 ]

3 голосов
/ 12 июля 2011

Вы должны создать QuestionsController, с частичной формой, включенной в представление индекса. Эта форма должна просто следовать за созданием действия, и это действие должно при ошибке (помните, что могут быть ошибки проверки) отображать действие индекса, а после успеха оно должно перенаправляться обратно на индекс.

Если вам не нужно создавать вопросы из других мест, тогда все сложнее.

UPDATE

Вы также можете создать DashboardsController, но я бы использовал его только для отображения панели мониторинга (показывать действие и единичный ресурс, а не ресурсы в rout.rb), а затем обычно следовать новой форме вопроса в QuestoinsController # create и перенаправлять обратно на DashboardsController. #шоу. Таким образом, RESTful более удобно, если вы также показываете несколько типов ресурсов на панели мониторинга, потому что вы показываете отдельную панель управления (с вопросами и другими ресурсами), но вы следуете пункту QuestionsController # create, чтобы создать Question.

ОБНОВЛЕНИЕ 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.

1 голос
/ 12 июля 2011

Вы можете комбинировать оба этих параметра, например, на странице указателя.Форма поля с form_for(@question) блоком и отображение коллекции @questions под ним.Наверняка вы должны определить @question и @questions в индексном действии контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...