:id =› info error рельсы злобных форм при получении параметров

Я новичок в злой форме и следил за эпизодом railcast на злобные формы, но я продолжаю получать эту ошибку "Не удалось найти компанию с '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

person Juan Pablo Ugas    schedule 13.01.2016    source источник


Ответы (1)


Когда вы используете #find, а запись не найдена, ActiveRecord вызывает ActiveRecord::RecordNotFound с сообщением типа «Не удалось найти компанию с id='somevalue'».

Я предполагаю, что ваш столбец id имеет тип integer, и вы передаете строку.

В вашем методе #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 с params[:id] == 'info'.

Как мы видели ранее, вы получаете исключение ActiveRecord::RecordNotFound, потому что ActiveRecord не может найти запись с идентификатором «info».

Ошибка возникает в вашем контроллере, но проблема, вероятно, в ваших представлениях или в перенаправлении. Вам нужен идентификатор, и вы передаете строку.

РЕДАКТИРОВАТЬ: как обсуждалось в комментариях

Ok params[:id] == 'info' генерируется wicked. Они используют идентификатор для управления потоком шагов. Вам нужно использовать вложенные маршруты, чтобы рельсы генерировали что-то вроде params[:company_id].

ресурсы :компании делают ресурсы :шаги, контроллер: 'компании/шаги' конец

Таким образом, рейк-маршруты должны дать вам: /companies/:company_id/steps/:id

в контроллере params[:company_id] == 42 params[:id] == 'info'

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

person Lainnie    schedule 13.01.2016
comment
Я пытаюсь передать объект при сохранении в новый контроллер, который я создал для Wicked Form, идея в том, что я могу разбить большую форму на 3 этапа. В моем контроллере компании я передаю или еще лучше пытаюсь передать объект (@company) новому контроллеру, который является Company_Steps_Path. В новом пути я пытаюсь получить этот объект, потянув его через его: id. :id в rails всегда является целым числом, в моих маршрутах он содержит следующие ресурсы :companies resources :company_steps - person Juan Pablo Ugas; 14.01.2016
comment
Ok params[:id] == 'info' генерируется wicked. Они используют идентификатор для управления потоком шагов. Вам нужно использовать вложенные маршруты, чтобы рельсы генерировали что-то вроде params[:company_id]. resources :companies do resources :steps, controller: 'companies/steps' end Таким образом, рейк-маршруты должны дать вам: /companies/:company_id/steps/:id В контроллере params[:company_id] == 42 params[:id] = = 'info' github.com/schneems/wicked/ вики/ - person Lainnie; 14.01.2016
comment
Хорошо, наверное, стоило уделить больше внимания странице на github. У них есть ссылка на мой точный сценарий здесь Building Partial Объекты шаг за шагом отредактируйте свой ответ, чтобы прочитать то, что мы обсуждали, и я отмечу его как правильный. - person Juan Pablo Ugas; 14.01.2016