我有一个用户可以创建调查问题的应用程序。如果您设置如下所示的网址,那么表格是从您期望的页面提交的,一切正常
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
答案 0 :(得分:1)
请尝试以下方法之一:
1。)在您的观点中,将@survey
更改为Survey.new
或
2。)在Users#show
操作中,添加@survey = Survey.new