0

我有一个嵌套路线:

resources :period_registrations do
  member do
    post :save_period
  end

这指向我的控制器动作:

 def save_period
    @period_registration = PeriodRegistration.new(params[:registration])
    @period_registration.save
    redirect_to root_path
  end

我有一个测试:

test "should get save_period" do
    sign_in(FactoryGirl.create(:user))
     assert_difference('Event.count') do
      post :save_period, period_registration: FactoryGirl.attributes_for(:period_registration)
    end
    assert_not_nil assigns(:period_registration)

    assert_response :success
  end

运行时会产生以下错误:

 1) Error:
test_should_get_save_period(PeriodRegistrationsControllerTest):
ActionController::RoutingError: No route matches {:period_registration=>{}, :controller=>"period_registrations", :action=>"save_period"}

我觉得奇怪的是 :period_registration 是空的。应该是吗?我该如何解决这个问题?

4

1 回答 1

1

post应该为 定义collection,即你需要改变你的路由:

post :save_period, :on => :collection

而不是member块。例如,rails 内置create(由 生成resources)方法也绑定到一个集合。

补充笔记:

  1. 您的控制器中有错误:PeriodRegistration.new(params[:registration]),但应该是PeriodRegistration.new(params[:period_registration])
  2. 测试中有一个错字:should get save_period=>should post save_period
于 2012-08-22T18:44:27.317 回答