:id => "info" 错误 rails 检索参数时的错误形式

:id => "info" error rails wicked forms when retrieving params

我是 wicked form 的新手,我一直在关注 railcast episode on wicked forms,但我一直收到此错误 "Couldn't find Company with 'id'=info"。所以我知道问题显然出在我的控制器某处。我知道这是非常简单的事情,我只是在绞尽脑汁,所以我知道你们会提供巨大的帮助。这是代码,感谢所有帮助!

公司控制人代码:

def create
@company = Company.new(company_params)

respond_to do |format|
  if @company.save
    @object = @company.id
    format.html { redirect_to(company_steps_path(@company)) }
    format.json { render :show, status: :created, location: @company }
  else
    format.html { render :new }
    format.json { render json: @company.errors, status: :unprocessable_entity }
  end
end
  end

company_steps 控制器代码:

class CompanyStepsController < ApplicationController


include Wicked::Wizard

  steps :info, :address, :quote

  def show
    @company = Company.find(params[:id])
    render_wizard
  end
  def update
    @company = Company.where(id: params[:id])
    @company.attributes = params[:company]
    render_wizard @company
  end
end

当您使用#find 并且未找到记录时,ActiveRecord 引发 ActiveRecord::RecordNotFound 并显示 "Couldn't find Company with id='somevalue'".

之类的消息

我假设你的 id 列是整数类型,而你传递的是一个字符串。

在你的#show 方法中 params[:id] == 'info'.

检查您的 link_to、redirect_to 和路线。

在某些时候,您会生成此 url http://localhost:3000/company_steps/info(可能在视图中)。

你对它做了一个 GET 请求,匹配 GET "/company_steps/:id" company_steps#show.

#show 方法在控制器 CompanyStepsController 中调用,参数 [:id] == 'info'.

正如我们之前看到的,您会得到一个 ActiveRecord::RecordNotFound 异常,因为 ActiveRecord 无法找到 ID 为 'info'.

的记录

您的控制器中出现错误,但问题可能出在您的视图或重定向中。您需要一个 id 并传递一个字符串。

编辑:如评论中所述

Ok params[:id] == 'info'由wicked生成。 他们使用 id 来控制步骤的流程。 您需要使用嵌套路由让 rails 生成类似 params[:company_id].

的东西

资源:公司做 资源:步骤,控制器:'companies/steps' 结束

所以佣金路线应该给你: /公司/:company_id/steps/:id

在控制器中 参数[:company_id] == 42 参数[:id] == 'info'

https://github.com/schneems/wicked/wiki/Building-Partial-Objects-Step-by-Step