Rails将id设置为new的默认parems?

问题描述 投票:0回答:1

我在我的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”

ruby-on-rails
1个回答
1
投票

这是设置新记录的一种非常奇怪的方法。我认为问题出在你的路线上。您可能正在尝试访问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

© www.soinside.com 2019 - 2024. All rights reserved.