2014-12-09 3 views
2

Я бы хотел направить пользователей на страницу «Результаты», когда они нажмут кнопку «Отправить» из 8 вопросов с несколькими вариантами выбора, а также сохраняют свои ответы на база данных.Rails: Как направить на страницу результатов в форме 'submit'

В данный момент я использую 'form_for' и передаю current_user. При нажатии кнопки «Отправить» оно направляется на действие «Пользователь/показать». Я хотел бы перейти на страницу с подробными данными пользователя. Как мне это сделать?

Вот мой (очень грубый тест) форма с, до сих пор, один многовариантных вопрос (стиль от начальной загрузки):

<%= form_for([current_user]) do |f| %> 
    <p> 
    <%= text_field(:user, :name) %> 
    </p> 
    <div class="btn-group-vertical clearfix form-group" data-toggle="buttons"> 
      <label class="btn btn-primary text-left"> 
      <input name="options" id="option1" type="radio" onclick="multiChoiceClick(1, 1)">A. Always. I'm the leader and should have the final say 
      </label> 
      <label class="btn btn-primary text-left"> 
      <input name="options" id="option2" type="radio">B. Sometimes, but I think the group should make decisions if possible 
      </label> 
      <label class="btn btn-primary text-left"> 
      <input name="options" id="option3" type="radio">C. I generally don't get involved. The group can make their own decisions without my help 
      </label> 
    </div> 
    <p> 
    <%= f.submit("Get my results!") %> 
    </p> 
<% end %> 

Я в настоящее время в том числе text_field с именем пользователя только в качестве теста ,

Я хотел бы узнать, как «связать» первый вопрос с несколькими вариантами выбора для пользователя, но отобразить страницу результатов, когда нажата «получить мои результаты».

Возможно, у меня есть несколько ошибок в этом коде. Если да, и у вас есть ответ, не могли бы вы указать, что я ошибаюсь и объясню правильный способ сделать это? Извините, что я был настолько конкретным, но ранее у меня было несколько комментариев, которые ТОЛЬКО указывают на то, что не так, без альтернативы.

Спасибо.

Edit:

Кто-то спросил для контроллера, так вот она:

class HomeController < ApplicationController 
    def index 
    end 

    def whattypeofleader 
     @user = current_user 
     #@quiz_answer = current_user.quiz_answers(0).build 
    end 

    def post_params 
     params.require(:quiz_answer).permit(:body, :user_id) 
    end 
end 

Я имею @quiz_answer комментировал, потому что я не был уверен, как связать его с форма. В пользовательском контроллере Пользователь has_many: quiz_answers и QuizAnswer принадлежит_to: user

ответ

6

Перенаправление должно быть отправлено с вашего контроллера. После удалось Вашие данные, простой:

redirect_to results_path

Ваш путь результаты должны быть в вашем config/routes.rb.

Не стесняйтесь поделиться немного больше, как ваш контроллер, чтобы увидеть, если мы можем пойти глубже :)

[EDIT] следующие замечания

Отказ от ответственности: не уверен, множественное управление викторин рельсов ...

форма должна быть оказана методом new, например, так:

class QuizzesController < ApplicationController 

    ... 

    def new 
    @user = current_user  #you now have access to the @user variable in your view 
    end 

    ... 
    def create 
    # do your thing with your params 
    # usually, you want to redirect to the results page if the action has been saved 
    # so let's say that you built an @object beforehand with the params you received 
    # extactly like @DarkMousse answer : 

    if @object.save 
     redirect_to results_path 
     flash[:notice] = "Thanks for submitting these questions" 
    else 
     render 'new' 
    end 

    # this way, if all is good, go to results_path, else, return to the 'new' 

    end 
    ... 

end 

Для того, чтобы получить доступ к этой акции, вы должны иметь маршрут, чтобы добраться до него, давайте перейдем к config/routes.rb

YouApplicationName::Application.routes.draw do 
    ... 
    #it 'opens' the routes to access all method from your quizzes controller 
    resources :quizzes 
    resources :results 
    ... 
end 

Теперь вы можете получить доступ к викторин/новый.Это сделает вид в views/quizzes/new, в котором вы могли бы иметь форму, как так:

form_for @user do |f| 
    # ... your form ... 
end 

Обратите внимание, что @user доступна благодаря нашему new метода в нашем QuizzesController.

Теперь, когда мы добавили results нашим маршрутам, с rake routes в терминале вы должны найти results_path, ведущие к (еще создать :)) ResultsControllerindex метода.

Это может быть похоже на это:

class ResultsController < ApplicationController 
    def index 
    # in order to access all the results in our view 
    @results = Results.all 
    end 
end 

Таким образом, results_path ведет к этому действию, которое по умолчанию (спасибо рельсов) зовет views/results/index.html.erb для визуализации.

+0

Спасибо за ваш ответ! Я добавил HomeController выше и некоторые подробности об отношениях User и QuizAnswer. Я думаю, что моя большая проблема заключается в том, что я не вижу, откуда эти помощники * _path. Где, или как, я бы сгенерировал путь results_path? – moosefetcher

+0

Ваш 'home_controller' не должен управлять вашим пользователем. Если вы хотите управлять своими викторинами, продолжайте и создайте QuizzController. В методе 'new' вы можете получить своего пользователя и передать его вашему представлению (' @user = current_user'). У вас есть в 'view/quizzes/new.html.erb'' form_for @ user'. Rails form helper позаботится о передаче данных представления в ваш 'create'method в' QuizzController', и именно там вы будете управлять своими параметрами. Я поняла? Вы можете сказать нет! – Stan

+0

Gah! Я думаю, что есть много, чтобы оценить сразу. Когда вы говорите «в новом методе», это «новый» метод контроллера QuizAnswer? И - в настоящее время форма является частичной, отображаемой как часть представления home/whattypeofleaderareyou.html.erb. Но вы говорите, что форма должна быть в викторинах/new.html.erb, правильно? Я расскажу, что происходит ... – moosefetcher

0

Отправка формы включает в себя запрос POST. Поэтому вы отправляете данные на сервер. В Rails это можно выполнить с помощью Create Action. Есть ли что-то подобное в вашем Home Controller

def create 
    @question = Question.new 
    if @question.save 
    redirect_to results_path 
    flash[:notice] = "Thanks for submitting these questions" 
    else 
    render 'new' 
    end 
end 
0

Просто добавьте «redirect_to results_path» в соответствующем контроллере сразу объект был успешно сохранен в базе данных.