2013-03-08 32 views
0

我是新來的Rails和product_controller.rb如何從視圖模板在軌道中進行控制器函數調用?

def detach 
    @product.photo = nil 
    @product.save 
end 

具有這樣的功能,現在我想調用此方法,以便該方法得到執行從查看文件show.html.erb。怎麼做 ?我可以看到7個方法通過.find(params [id])調用,但這對我來說也是不清楚的。

+1

調用發生從控制器到視圖,但不是從視圖到控制器。那麼你不需要調用,路由會爲控制器操作做到這一點。 – 2013-03-08 10:33:11

回答

1

嘗試改變如下

<%= link_to 'detach_image', product_detach_path(@product) %> 

我建議你看看guides.rubyonrails.org/routing.html。

你可以做如下,

您可以使用匹配

match '/update_profile', :to => 'users#update_profile' 

resources :users do 
    get 'update_profile', on: :member 
end 

,然後你一定會有方法在用戶控制器

def update_profile 
    @user = User.find(params[:id]) 

    if @user.save 
    redirect_to @user, notice: 'user updated successfully!' 
    end 
end 
+0

謝謝,最後它的工作:)幾個問題。 1. product_detach_path(@product)和product_detach_path之間有什麼區別? 2.這個代碼是做什麼的「資源:產品做 成員做 得到'detach'#/ products /:id/detach end end」 – iCyborg 2013-03-08 11:47:10

+0

:)簡單的人,你必須告訴你的方法你需要哪些東西更新,所以我們'product_detach_path(@product)'加上我建議你從guides.rubyonrails.org採取教程。第二個答案,它只是生成路線並告訴控制器期望用戶點擊鏈接(在你的情況下)的產品。 接受我的回答。 :) 謝謝。 – 2013-03-08 11:52:42

2

你需要添加routes.rb的路線,像這樣:

​​

這會給你detach_product_path(@product)您可以在您的視圖中使用。你可能也想在分離方法重定向:

def detach 
    @product = Product.find(params[:id]) 
    @product.photo = nil 

    if @product.save 
    redirect_to @product, notice: 'Photo was detached!' 
    end 
end 
+0

謝謝,我需要這個「得到'/ detach'=>'產品#detach',在:: member下:resources:products?當運行rake路由時,它給我錯誤的語法不正確。 – iCyborg 2013-03-08 11:18:10

+0

這是我當前在路由中的代碼,「資源:產品做 得到'detach'=>」產品#detach「 結束 」,創建的路徑是 - 「product_detach GET/products /:product_id/detach(。 :格式)產品#detach「,我已經把show.html.erb文件 - 」<%= link_to'detach_image',product_detach_path%>「..我得到錯誤」沒有路線匹配{:行動=>「分離「::controller =>」products「}」 – iCyborg 2013-03-08 11:24:02

+1

你不需要「=>'products#detach'' – 2013-03-08 11:26:00

1

我h大家解決了西蒙的回答。但是,你仍然面臨着因爲你不及格的產品與路徑問題:

<%= link_to 'detach_image', detach_product_path %> 

您需要的產品傳遞給動作:

<%= link_to 'detach_image', detach_product_path(@product) %> 

否則,Product.find(params[:id])不會找到任何產品,以及@product會得到空...

編輯回答您的問題:

1 - product_detach_path是控制器product中動作detach的幫手。還有product_detach_url,它做同樣的事情,但也包括當前的主機,端口和路徑前綴。更多詳情here
但是,它不會傳遞任何參數,因此Product.find(params[:id])找不到產品。出於這個原因,你必須指定你想要找的產品。 @productshow動作定義,所以它是提供你的看法,但你可以發送的detach action任何其他產品....也許第一個:product_detach_path(Product.first)

2 - 的resources :products產生seven default routes:指數,新,創建,顯示,編輯,更新和銷燬。
爲了添加更多的路線,你可以使用membercollection。基本上,member將爲產品(產品/ 1 /分離)添加路線,而collection將向控制器添加路線,如索引(產品/分離)。更多信息here

我希望它有幫助...

+0

謝謝,最後它的工作:)幾個問題。 1. product_detach_path(@product)和product_detach_path之間有什麼區別? 2.這是什麼代碼路由代碼做「資源:產品做 成員做 得到'detach'#/產品/:id /分離 結束 結束」 – iCyborg 2013-03-08 11:47:51

+0

謝謝,真的很感激它加布裏埃爾 – iCyborg 2013-03-08 12:12:48

相關問題