:id =>检索params

时间:2016-01-13 21:56:32

标签: ruby-on-rails forms ruby-on-rails-4 wicked-gem

我是邪恶形式的新手,我跟随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

1 个答案:

答案 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