2013-07-16 63 views
1

我是新來的紅寶石在rails上,我一直在閱讀rails書的敏捷web開發。 我正在研究迭代B1:驗證,並且我正在進行測試時對符號:產品感到困惑。問題是關於「:product => @update」 我真的不知道這是什麼意思,以及產品符號來自哪裏。我知道這是一個散列,但它散列到哪個表?它究竟在這裏做什麼?代碼如下。先謝謝你。敏捷web開發與rails ProductsControllerTest,含義:產品符號

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 

回答

1

這個結構沒有什麼神奇的。 @update是引用散列的變量名稱。散列在您的測試文件中早些時候聲明。

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

此散列包含應傳遞給在products控制器update行動的新數據。由於變量的命名方式,這很令人困惑。一個更好的名字可能會有所幫助:

@product_attributes 

products#update動作需要包含更新數據的哈希值。該數據用於更新對象。

在測試下面的行...

post :update, :product => @update 

符合這條線,你可能對貴公司產品的控制器:

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

通知params[:product]。它基本上是說:「做一個POST請求products#update,並將它傳遞的@update哈希爲:product

這解釋了符號的一部分。在測試中:product符號是包含產品數據的參數的名稱,該更新動作需要。

post :update, :product => @update 

從理論上講你可以說它是任何你想要的,但是按照慣例它有助於把它叫做資源名稱。

相關問題