首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有匹配{:controller=>"stocks",:action=>"create"} RSpec Rails 3的路由

没有匹配{:controller=>"stocks",:action=>"create"} RSpec Rails 3的路由
EN

Stack Overflow用户
提问于 2014-07-28 08:15:28
回答 2查看 19.1K关注 0票数 18

我不明白为什么在运行RSpec时会收到这个错误消息:

代码语言:javascript
复制
Failure/Error: post :create
 ActionController::RoutingError:
   No route matches {:controller=>"stocks", :action=>"create"}

控制器stocks存在,操作create存在,它应该使用的路由是:

代码语言:javascript
复制
match 'stocks/:user_id' => 'stocks#create', :via => :post, :as => :query

路由文件:

代码语言:javascript
复制
FruthScreener::Application.routes.draw do
root :to => 'stocks#index' # add user_id
match 'stocks/:user_id' => 'stocks#create', :via => :post, :as => :query
match 'stocks/:user_id' => 'stocks#destroy', :via => :delete, :as => :reset
match 'stocks/:user_id/update' => "stocks#update_index", :via => :post

库管员:(是的,这将是DRYed up)

代码语言:javascript
复制
class StocksController < ApplicationController
def index
    @user = User.create
    @user_id_num = @user.id
    @user.stocks = Stock.all
    @user.save
    selected_user_stocks = (UserStock.where("user_id = #{@user_id_num} AND selected = true")).take(25)
    @stocks = UserStock.convert_to_stocks(selected_user_stocks)
    @pages = Pagination.determine_num_pages(@user.stocks) 
end

def update_index
    @user_id_num = params[:user_id]
    @user = User.find(@user_id_num)
    selected_user_stocks = UserStock.where("user_id = #{@user_id_num} AND selected = true")
    @stocks = UserStock.convert_to_stocks(selected_user_stocks)
    @pages = Pagination.determine_num_pages(@stocks)
    @stocks = Stock.display(@stocks, params[:pageNumber].to_i)
    render partial: 'stock_data'
end

def create
    UserStock.eliminate_stocks(params) # thinking it's like "creating" a new batch of stocks
    @user_id_num = params[:user_id]
    @user = User.find(@user_id_num)
    selected_user_stocks = UserStock.where("user_id = #{@user_id_num} AND selected = true")
    @stocks = UserStock.convert_to_stocks(selected_user_stocks)
    @pages = Pagination.determine_num_pages(@stocks) 
    @stocks = Stock.display(@stocks, 1)
    render partial: 'stock_data'
end

def destroy
    stocks_to_reset = UserStock.where("user_id = #{params[:user_id]}")
    stocks_to_reset.each do |user_stock|
        user_stock.selected = true
        user_stock.save
    end
    @user_id_num = params[:user_id]
    @user = User.find(@user_id_num)
     selected_user_stocks = UserStock.where("user_id = #{@user_id_num} AND selected = true")
    @stocks = UserStock.convert_to_stocks(selected_user_stocks)
    @pages = Pagination.determine_num_pages(@stocks) 
    @stocks = Stock.display(@stocks, 1)
    render partial: 'stock_data'
end


end

库存控制器规格:(底部测试失败)

代码语言:javascript
复制
require 'spec_helper'

RSpec.configure do |config|
  config.infer_spec_type_from_file_location!
end

describe StocksController do

  context "index" do 
    before do 
        @user_count = User.all.count 
        @stock_count = Stock.all.count
        get :index
    end

    it "should create a new user" do
        expect(User.all.count).to eq(@user_count + 1)
    end

    it "should associate all stocks with the user" do
        expect(User.last.stocks.count).to eq(@stock_count)
    end
  end

  context "create" do # investigate why this isn't working...
    it "should render the stock_list partial" do
        user = User.create
        post :create
        response.should render_template(partial: "stock_list")
    end
  end

end

谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-28 08:17:15

代码语言:javascript
复制
match 'stocks/:user_id' => 'stocks#create', :via => :post, :as => :query

告诉我们它需要:user_id才能成为有效的路由。

代码语言:javascript
复制
post :create

没有:user_id...所以它不会引用有效的路由。我会把它改成

代码语言:javascript
复制
post :create, :user_id => user.id
票数 34
EN

Stack Overflow用户

发布于 2017-09-25 13:28:09

代码语言:javascript
复制
post :create, params: {user_id: user.id}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24986957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档