1

私はRuby on Railsを初めて使用し、レールブックを使用したアジャイルWeb開発を読んでいます。私はイテレーション B1: 検証に取り組んでいます。テストに取り組んでいる間、シンボル :product に本当に混乱しています。質問は「:product => @update」に関するものです。これが何を意味し、:product シンボルがどこから来たのか、私には本当にわかりません。私はそれがハッシュであることを知っていますが、どのテーブルにハッシュしますか? ここで正確に何をしますか?コードは次のとおりです。前もって感謝します。

require 'test_helper'

class ProductsControllerTest < ActionController::TestCase
  setup do
    @product = products(:one)
    @update = {
      :title       => 'Lorem Ipsum',
      :description => 'Wibbles are fun!',
      :image_url   => 'lorem.jpg',
      :price       => 19.95
    }
  end

  test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:products)
  end

  test "should get new" do
    get :new
    assert_response :success
  end

  test "should create product" do
    assert_difference('Product.count') do
      ***post :create, :product => @update***
    end

    assert_redirected_to product_path(assigns(:product))
  end

  # ...

  test "should show product" do
    get :show, :id => @product.to_param
    assert_response :success
  end

  test "should get edit" do
    get :edit, :id => @product.to_param
    assert_response :success
  end

  test "should update product" do
    put :update, :id => @product.to_param, :product => @update
    assert_redirected_to product_path(assigns(:product))
  end

  # ...

  test "should destroy product" do
    assert_difference('Product.count', -1) do
      delete :destroy, :id => @product.to_param
    end

    assert_redirected_to products_path
  end
end
4

1 に答える 1

1

この構造には魔法のようなものは何もありません。は@update、ハッシュを参照する変数名です。ハッシュは、テスト ファイルの前の方で宣言されています。

@update = {
  :title       => 'Lorem Ipsum',
  :description => 'Wibbles are fun!',
  :image_url   => 'lorem.jpg',
  :price       => 19.95
}

このハッシュには、コントローラのupdateアクションに渡す必要がある新しいデータが含まれています。products変数の名前の付け方が紛らわしいです。より良い名前が役立つ場合があります。

@product_attributes

アクションは、products#update更新されたデータを含むハッシュを想定しています。そのデータは、オブジェクトの更新に使用されます。

テストの次の行...

post :update, :product => @update

おそらく製品コントローラーにある次の行に対応します。

if @product.update_attributes(params[:product])

注意してくださいparams[:product]。基本的には、「に投稿リクエストを送信し、ハッシュを としてproducts#update渡します。@update:product

そして、それはシンボル部分を説明しています。テスト内の:product記号は、更新アクションが期待する製品データを含むパラメーターの名前です。

post :update, :product => @update

理論的には、好きなように呼び出すことができます。ただし、慣例に従って、それをリソース名と呼ぶと役立ちます。

于 2013-07-16T02:53:15.960 に答える