我是邪恶形式的新手,我跟随railcast episode on wicked forms,但我一直收到此错误“无法找到公司'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
答案 0 :(得分:1)
当您使用#find并且未找到记录时,ActiveRecord会引发一条ActiveRecord :: RecordNotFound,其中包含“找不到具有id ='somevalue'的公司”的消息。
我假设你的id列是整数类型,你传递一个字符串。
在#show方法中使用params [:id] =='info'。
检查您的link_to,redirect_to和路线。
在某些时候,您会生成此网址http://localhost:3000/company_steps/info(可能在视图中)。
你对它做了一个GET请求,它与GET“/ company_steps /:id”company_steps#show匹配。
#show方法是在控制器CompanyStepsController中调用params [:id] =='info'。
正如我们之前看到的,你得到一个ActiveRecord :: RecordNotFound异常,因为ActiveRecord找不到id为'info'的记录。
控制器中出现错误,但问题可能出在您的视图或重定向中。你需要一个id并传递一个字符串。
好的params [:id] =='info'由wicked生成。 他们使用id来控制步骤的流程。 您需要使用嵌套路由让rails生成类似params [:company_id]。
资源:公司做的 资源:步骤,控制器:'公司/步骤' 端所以rake路线应该给你: /公司/:COMPANY_ID /步骤/:ID
在控制器中 params [:company_id] == 42 params [:id] =='info'
https://github.com/schneems/wicked/wiki/Building-Partial-Objects-Step-by-Step