模型Order的未定义方法“ aasm_state”是什么意思? aasm_state =

时间:2018-11-08 23:35:03

标签: ruby-on-rails capybara rspec-rails aasm

添加Aasm gem后,Rspec-rails测试开始失败。 完成所有基本设置。通过添加aasm_state列进行迁移。向订单模型添加状态。

测试日志:

Searching book Visitor searches books by title
 Failure/Error: order = Order.create

 ActionView::Template::Error:
   undefined method `aasm_state' for #<Order:0x0000000008e48740>
   Did you mean?  aasm_state=

但是测试中没有订单:

require 'spec_helper'
require 'rails_helper'

feature 'Searching book' do

  before do
    book = Book.create title: "Geralt"
    author = Author.create full_name: "Swiss"
    category = Category.create title: "Programming"
    category.books << book
    book.authors << author
    author.books << book
    visit books_path
  end

  scenario 'Visitor searches books by title' do
    fill_in 'search', with: "Geralt"
    click_button('Search')
    expect(page).to have_content 'Geralt'
  end

end

也许问题出在应用程序控制器帮助器方法中:

class ApplicationController < ActionController::Base
  helper_method :current_order
  protect_from_forgery with: :exception

  def current_order
    if session[:order_id].nil?
      order = Order.create
      session[:order_id] = order.id
      order
    else
      Order.find(session[:order_id])
    end
  end

end

带有aasm的Order.rb,部分:

  include AASM
  aasm do
    state :in_progress, initial: true
    state :processing
    state :in_delivery
    state :delivered
    state :canceled
  end

模板:

= form_tag books_path, method: :get do
  .form-group.col-sm-2
    = text_field_tag :search, params[:search], class: "form-control", id: "search",placeholder: "Search book"
  = submit_tag "Search", class: "btn btn-primary"

= render @books

= "Items in cart #{current_order.order_items.count}"

0 个答案:

没有答案