我在我的RoR应用程序上收到404错误,我发现这是因为控制器中的一个方法,只有当记录不是新的时才触发,当记录是新的时触发。
我这样做,检查我的控制器中的记录的id是否为零。
before_action :create_record, if: proc { not params[:id].nil? }
我很困惑它被触发所以我去了头并检查了我的前端网络,显示如下:
Request
Parameters:
{"format"=>"json", "id"=>"new"} <----Set to new by default
我的完全控制器看起来像这样:
class Api::MyController < ApplicationController
before_action :create_recotrd, if: proc { not params[:id].nil? }
def show
end
def index
@my_model = MyModel.all
end
def create
@my_model = MyModel.new(my_model_params)
respond_to do |format|
if @my_model.save
format.json { render json: @my_model, status: :created}
else
format.json { render json: @my_model.errors, status: :unprocessable_entity}
end
end
end
def update
@my_model = MyModel.update
end
private
def create_record
@my_model = MyModel.find(params[:id])
end
def my_model_params
params.require(:my_model).permit(
:city,
:state,
:county,
:zip,
:telephone,
:email,
)
end
end
我似乎无法找出为什么参数中的id设置为“new
”而不是“nil
”。
我在控制台中尝试使用MyModel.new
,默认id为nil,但是当我执行GET
请求时,id被设置为“new”
这是设置新记录的一种非常奇怪的方法。我认为问题出在你的路线上。您可能正在尝试访问yoursite.com/your_model/new
并且您的路由已配置为查找
get "your_model/:id" => "your_controller#show"
你可能错过了
get "your_model/new" => "your_controller#new"
因此,当您尝试访问your_model/new
时,路线将“new”映射为您网址中的:id param。
我也没有在你的控制器中看到new
动作。你应该在这里阅读为rails设置的基本资源:http://guides.rubyonrails.org/routing.html。