Rails:如何指向表单上的结果页面'提交'

时间:2014-12-09 16:25:37

标签: ruby-on-rails ruby ruby-on-rails-4 formbuilder

我想在用户单击8个问题多项选择测验的提交按钮时将用户引导至“结果”页面,同时还将他们的答案保存到数据库中。

目前我正在使用'form_for'并传入current_user。单击提交时,它将指向User / show操作。我想转到详细说明用户结果的页面。我该怎么做呢?

这是我的(非常粗略的测试)形式,到目前为止,有一个多选题(由引导程序设计):

<%= 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包含在用户名中作为测试。

我想知道如何将第一个多选问题“连线”给用户,但在点击“获取我的结果”时显示结果页面。

我可能在这段代码中有几个错误。如果我这样做,并且你有答案,请你指出我的错误并解释做正确的方法吗?很抱歉这么具体,但我之前有过一些评论,只能指出什么是错的,没有别的选择。

感谢。

修改

有人要求控制器,所以这是:

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 belongs_to:user

3 个答案:

答案 0 :(得分:7)

重定向应来自您的控制器。 管理完数据之后,只需简单:

redirect_to results_path

您的结果路径应位于config/routes.rb

不要犹豫与控制器分享更多信息,看看我们是否可以更深入了解。)

评论后

[编辑]

免责声明:不确定Rails的多次测验管理......

您的表单应该通过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

请注意,由于我们的QuizzesController中的new方法,@ user是可访问的。

现在我们在路由中添加了results,终端中有rake routes,您应该找到results_path导致您(尚未创建:) {{1} } ResultsController方法。

可能看起来像这样:

index

这样,class ResultsController < ApplicationController def index # in order to access all the results in our view @results = Results.all end end 导致此操作,默认情况下(感谢rails)调用results_path进行渲染。

答案 1 :(得分: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

答案 2 :(得分:0)

只需添加&#34; redirect_to results_path&#34;在相应的控制器中,对象成功保存到数据库中。