从非常规页面提交表格

时间:2013-02-19 00:43:32

标签: ruby-on-rails

我有一个用户可以创建调查问题的应用程序。如果您设置如下所示的网址,那么表格是从您期望的页面提交的,一切正常

resources :surveys

当我向创建操作提交表单时,服务器中会发生这种情况。

Started POST "/surveys" for 127.0.0.1 at 2013-02-18 16:32:39 -0800
Processing by SurveysController#create as HTML

但是,在用户控制器的show动作中,我还包含了您希望在测量控制器的“新”操作中找到的代码。这样做是为了让用户可以从他们自己的个人资料中创建调查问题。但是,当提交表单时,它现在作为“GET”请求提交,并且正在用户控制器的show动作中处理,因此很明显调查没有被创建

Started GET "/twitterusers/1? whole bunch of data-passed-in-the-url-bar-via-GET-ommitted
Processing by TwitterusersController#show as HTML

这就是表单的样子(我没有包含部分内容)。

<%= form_for @survey do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name, "Name your Quiz" %><br />
    <%= f.text_field :name %>
    <%#= @survey.questions %>
  </p>

  <%= f.fields_for :questions do |builder| %>
       <%= render "question_fields", :f => builder %>
  <% end %>
  <p><%= link_to_add_fields "Add Question", f, :questions %></p>
  <p><%= f.submit %></p>
<% end %>

我想知道我是否可以对表单进行更改以完成我正在尝试的操作。如果这不可行(违反Rails惯例),请解释在我的情况下你会做什么。

更新 - 来自用户控制器的show动作的代码。调查has_many问题(accepts_nested_attributes_for),问题与答案相同。它创建了一个包含两组问题的表单(每个问题都有四个答案字段)

   def show
      @twitteruser = Twitteruser.find(params[:id])
      2.times do
      questions = @survey.questions.build
      4.times { questions.answers.build }
      end
    end 

这是调查控制器的创建操作(如果我从show操作提交,则不会提交)

 def create
    @survey = current_user.surveys.build(params[:survey])

    if @survey.save
      redirect_to twitteruser_path(current_user), :notice => "Successfully created"
      # redirect_to @survey, :notice => "Successfully created survey."
    else
      render :action => 'new'
    end
 end

1 个答案:

答案 0 :(得分:1)

请尝试以下方法之一:

1。)在您的观点中,将@survey更改为Survey.new

2。)在Users#show操作中,添加@survey = Survey.new