1

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

resources :surveys

当我将表单提交到创建操作时,这就是服务器中发生的情况。

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

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

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 约定),请解释在我的情况下你会做什么。

更新——来自用户控制器的显示操作的代码。调查 has_many questions (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 

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

 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
4

1 回答 1

1

尝试以下方法之一:

1.) 在您看来,更改@surveySurvey.new

或者

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

于 2013-02-19T01:00:42.150 回答