form_for 使用 rails 呈现 get 而不是 post
form_for renders get rather than post, using rails
我有一个长表格,可以自动填写我们数据库中的信息(基于用户提供的部分信息)。当用户验证信息并重新提交表单时,信息应保存为用户。表单 - qualifying_events - 是视图/共享文件夹中的一个部分。自动填充它的数据由 qualifying_events_controller 作为 create 方法的一部分呈现。该部分在用户控制器呈现的视图/用户页面中呈现以供验证。用户输入的初始部分信息 - 在同一页面上的类似部分中 - 已正确保存。这是表格的顶部:
<form class="form-inline">
<%= form_for(@qualifying_event) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div >
<div class="form-group col-sm-12 text-center" style="margin-bottom: 5px;"><h5>
<div>
<li style="list-style-type: none; float: left; display: none; visibility: hidden;">
<%= current_user %>
</li>
</div>
<div>
<li style="list-style-type: none; float: left;">
<%= f.label :class_date %><br/>
<%= f.text_area :class_date, autofocus: true %>
</li>
</div>
错误信息如下:
No route matches [GET] "/qualifying_events"
这是我尝试过的方法:
1. 向配置/路由文件显式添加路由,尽管如果我运行 rake 路由它已经显示:
post 'qualifying_events_path' => 'qualifying_events#create'
2. 更改 form_for 语言以显式调用 'post':
<%= form_for(@qualifying_event, url: qualifying_events_path, method: => post) do |f| %>
我仍然收到相同的错误消息。由于我有其他表单使用相同的代码保存到数据库中,因此当从数据库中填充表单并且想要重新保存信息时,我必须假设发生了一些变化。我正在使用设计 gem 所以我查看了注册#edit 代码,希望我可以遵循以下格式:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
不幸的是,这种方法也没有用。
对于 'completeness',这里是 qualifying_events_controller 代码:
def create
@user = current_user
@qualifying_event = current_user.qualifying_events.build(qualifying_event_params)
if @qualifying_event.validated.nil?
# Match partial course information from current_user with records in table
# Get partial record's information
active_date = @qualifying_event.class_date
active_course = @qualifying_event.course_id
active_sponsor = @qualifying_event.sponsor_name
# Match on class_date, course_id, and sponsor_name
@qualifying_event = QualifyingEvent.new
@qualifying_event.assign_attributes(QualifyingEvent.
where("(class_date = :class_date AND course_id = :course_id)
OR (class_date = :class_date AND sponsor_name = :sponsor_name)
OR (course_id = :course_id AND sponsor_name = :sponsor_name)",
{class_date: active_date, course_id: active_course,
sponsor_name: active_sponsor}).first.attributes)
# render to confirmation form / form for completion
flash[:success] = "Qualifying Event saved for verification!"
respond_to do |format|
format.html {render 'users/user_dashboard' }
end
else
# if the record is complete
@qualifying_event.save
flash[:success] = "Qualifying Event created!"
redirect_to user_dashboard_path
end
'else' 语句中可能有错误。我还没有添加代码来验证是否存在所有必需的信息等。
我可以在数据库中保存和检索信息,但是重新提交编辑后的信息调用 'get' 而不是 'post.' 我错过了什么?提前谢谢你。
删除 form_for
之前的 <form class="form-inline">
(以及结束标记,如果有的话)。 HTML 表单不能嵌套,因此只处理具有 GET
方法的外部表单。
删除第一个 <form>
元素并修复您的 form_for
代码:
<%= form_for(@qualifying_event, url: qualifying_events_path, method: => post) do |f| %>
至:
<%= form_for(@qualifying_event, url: qualifying_events_path, method: :post, class: 'form-inline') do |f| %>
我有一个长表格,可以自动填写我们数据库中的信息(基于用户提供的部分信息)。当用户验证信息并重新提交表单时,信息应保存为用户。表单 - qualifying_events - 是视图/共享文件夹中的一个部分。自动填充它的数据由 qualifying_events_controller 作为 create 方法的一部分呈现。该部分在用户控制器呈现的视图/用户页面中呈现以供验证。用户输入的初始部分信息 - 在同一页面上的类似部分中 - 已正确保存。这是表格的顶部:
<form class="form-inline">
<%= form_for(@qualifying_event) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div >
<div class="form-group col-sm-12 text-center" style="margin-bottom: 5px;"><h5>
<div>
<li style="list-style-type: none; float: left; display: none; visibility: hidden;">
<%= current_user %>
</li>
</div>
<div>
<li style="list-style-type: none; float: left;">
<%= f.label :class_date %><br/>
<%= f.text_area :class_date, autofocus: true %>
</li>
</div>
错误信息如下:
No route matches [GET] "/qualifying_events"
这是我尝试过的方法:
1. 向配置/路由文件显式添加路由,尽管如果我运行 rake 路由它已经显示:
post 'qualifying_events_path' => 'qualifying_events#create'
2. 更改 form_for 语言以显式调用 'post':
<%= form_for(@qualifying_event, url: qualifying_events_path, method: => post) do |f| %>
我仍然收到相同的错误消息。由于我有其他表单使用相同的代码保存到数据库中,因此当从数据库中填充表单并且想要重新保存信息时,我必须假设发生了一些变化。我正在使用设计 gem 所以我查看了注册#edit 代码,希望我可以遵循以下格式:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
不幸的是,这种方法也没有用。
对于 'completeness',这里是 qualifying_events_controller 代码:
def create
@user = current_user
@qualifying_event = current_user.qualifying_events.build(qualifying_event_params)
if @qualifying_event.validated.nil?
# Match partial course information from current_user with records in table
# Get partial record's information
active_date = @qualifying_event.class_date
active_course = @qualifying_event.course_id
active_sponsor = @qualifying_event.sponsor_name
# Match on class_date, course_id, and sponsor_name
@qualifying_event = QualifyingEvent.new
@qualifying_event.assign_attributes(QualifyingEvent.
where("(class_date = :class_date AND course_id = :course_id)
OR (class_date = :class_date AND sponsor_name = :sponsor_name)
OR (course_id = :course_id AND sponsor_name = :sponsor_name)",
{class_date: active_date, course_id: active_course,
sponsor_name: active_sponsor}).first.attributes)
# render to confirmation form / form for completion
flash[:success] = "Qualifying Event saved for verification!"
respond_to do |format|
format.html {render 'users/user_dashboard' }
end
else
# if the record is complete
@qualifying_event.save
flash[:success] = "Qualifying Event created!"
redirect_to user_dashboard_path
end
'else' 语句中可能有错误。我还没有添加代码来验证是否存在所有必需的信息等。
我可以在数据库中保存和检索信息,但是重新提交编辑后的信息调用 'get' 而不是 'post.' 我错过了什么?提前谢谢你。
删除 form_for
之前的 <form class="form-inline">
(以及结束标记,如果有的话)。 HTML 表单不能嵌套,因此只处理具有 GET
方法的外部表单。
删除第一个 <form>
元素并修复您的 form_for
代码:
<%= form_for(@qualifying_event, url: qualifying_events_path, method: => post) do |f| %>
至:
<%= form_for(@qualifying_event, url: qualifying_events_path, method: :post, class: 'form-inline') do |f| %>