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