2

RSpec ビュー テストに合格しようとしているのですが、上記のエラーが発生しています。検索から、ネストされたルートに問題があると思いますが、修正方法がわかりません。完全なエラーは次のとおりです。

programs/show
  renders attributes in <p> (FAILED - 1)

Failures:

  1) programs/show renders attributes in <p>
     Failure/Error: render
     ActionView::Template::Error:
       No route matches {:action=>"sort_cycles", :controller=>"programs", :id=>nil}

コードで不平を言っている行は次のとおりです。

<ul class="cycles" data-update-url="<%= sort_cycles_program_url(params[:id]) %>" >

テストは次のようになります。

require 'spec_helper'

describe "programs/show" do
  before(:each) do
    FactoryGirl.create(:goal)
    FactoryGirl.create(:experience_level)
    @program = FactoryGirl.create(:program)
  end

  it "renders attributes in <p>" do
    render
    rendered.should match(/Name/)
    rendered.should match(/Gender/)
    rendered.should match(Goal.find(@program.goal_id).name)
    rendered.should match(ExperienceLevel.find(@program.experience_id).name)
  end
end

ルートは次のようになります。

resources :programs do
    member { post :sort_cycles }
    resources :cycles_programs do
    end
  end

の sort_cycles アクションProgramsController

def sort_cycles
    params[:cycles_program].each_with_index do |cycle_program_id, index|
      cycle_program = CyclesProgram.find(cycle_program_id)
      cycle_program.cycle_order = index+1
      cycle_program.save
    end
    render nothing: true
  end

編集:

ビューからのコードの完全なブロックは次のとおりです。

<ul class="cycles" data-update-url="<%= sort_cycles_program_url(params[:id]) %>" >
  <% @program.cycles_programs.each do |program| %>
    <%= content_tag_for :li, program, class: "cycle-block" do %>
      <%= link_to program.cycle.name, program.cycle %> | <%= link_to "Remove", program_cycles_program_path(@program, program), method: :delete %>
    <% end %>
  <% end %>
</ul>
4

1 に答える 1