0

次のような行がたくさんあります。

<input id="car_ids_" name="car_ids[]" value="142" type="checkbox"> Car 142
<input id="car_ids_" name="car_ids[]" value="143" type="checkbox"> Car 143
<input id="car_ids_" name="car_ids[]" value="144" type="checkbox"> Car 144
<input id="car_ids_" name="car_ids[]" value="145" type="checkbox"> Car 145

このレールキャストで見たので、この動作が必要です: http://railscasts.com/episodes/165-edit-multiple?view=asciicast

自分でテストするとうまくいきますが、カピバラでいくつかの要素を選択しようとすると、方法がわかりませんか?

before(:each) do
  check "car_ids_:first"
  check "car_ids_:last"
end

私はいつも得る

Capybara::ElementNotFound:
       cannot check field, no checkbox with id, name, or label 'car_ids_:first' found

これがどのように機能するか教えていただけますか?2 番目と 3 番目の要素を選択したいですか?

アップデート:

  find(:css, "#car_ids_[value='#{@car1.id}']").set(true)
  => find(:css, "#car_ids_[value='#{@car1.id}']").checked?
  ==> "checked"
  find(:css, "#car_ids_[value='#{@car2.id}']").set(nil)
  => find(:css, "#car_ids_[value='#{@car1.id}']").checked?
  ==> nil
  find(:css, "#car_ids_[value='#{@car3.id}']").set(true)
  => find(:css, "#car_ids_[value='#{@car1.id}']").checked?
  ==> "checked"

  select("Deactivate", :from => "car_action")

  click_button "Submit"

  page.body.should have_content "Updated cars!"

  @user.cars[0].active?.should == true
  @user.cars[1].active?.should == false
  @user.cars[2].active?.should == true

しかし、最終的に、チェックボックスの値はコントローラーに渡されません! 理由はわかりません....チェックボックスがチェックされているように見えます(しかし、save_and_open_pageでページを開いた場合、それらもチェックされていませんか?)

4

1 に答える 1

1

最も簡単な方法は、カピバラにラベルでボックスをチェックするように指示することです。@cars コレクションを自由に使用できる場合は、次のようなことができます。

[@cars[1], @cars[2]].each do |car|
  check("Car #{car.id}")
end

編集

以下のコメントに基づいて、参照するコレクション項目に関係なく、2 番目と 3 番目の要素に具体的にアクセスしたい場合は、入力を id で div にラップして (セレクターの範囲を狭めるため)、たとえばcar-checkboxes、 を実行します。これ:

find(:css, "#car-checkboxes input:nth-child(2)").click

また

find(:css, "#car-checkboxes input:nth-child(2)").set(true)
于 2012-08-17T13:35:14.637 に答える