路线
resources :locations, :only => [:new, :create]
控制器
class LocationsController < ApplicationController
def new
@location = Location.new
end
def create
@location = Location.new(location_params)
if @location.save
flash[:notice] = 'Created location successfully'
redirect_to new_location_path
else
flash[:notice] = 'Invalid information. Please try again'
render :new
end
end
private
def location_params
params.require(:location).permit(:name, :street, :city, :state)
end
end
单击“保存”时出现错误消息。
ActionController::RoutingError:
No route matches [POST] "/locations/new"
视图
<%= simple_form_for :locations do |form| %>
<%= form.input :name %>
<%= form.input :street %>
<%= form.input :city %>
<%= form.input :state %>
<%= form.submit 'Create location' %>
<% end %>
使用capybara测试当我点击保存它时会创建一个新位置。我不太确定为什么它不知道后期路线是什么,因为我有新的和创建路线。如果我将一个binding.pry放在create方法下面,它就不会被调用。所以我的创建方法由于某种原因没有被调用。
编辑:
Rake Routes
locations POST /locations(.:format) locations#
new_location GET /locations/new(.:format) locations#new
答案 0 :(得分:1)
资源通常GET为new
,POST为create
。因此,您的表单可能会提交回新操作,而不是提交到创建操作。
以下是此指南:http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions
答案 1 :(得分:1)
问题在于观点。
<%= simple_form_for :locations do |form| %>
<%= form.input :name %>
<%= form.input :street %>
<%= form.input :city %>
<%= form.input :state %>
<%= form.submit 'Create location' %>
<% end %>
当我应该从控制器调用实例变量@location时,我正在调用位置符号。
实际问题是rails 3.2.12不接受私人参数
答案 2 :(得分:0)
使用resources
,应使用new
而不是GET
获取POST
操作。 create
将为POST
。检查您的rake routes