2012-11-28 45 views
0

我在我的Client模型上有一個叫做set_score的方法。如果我在Model類中有一個自定義方法,當按下鏈接時如何執行它?

在我的Clients#index視圖上,我想創建一個說明'更新分數'的按鈕/鏈接,所有這些都會將必要的參數發送到該方法並運行它。

我該怎麼做?

我可以使用Rails鏈接助手來做到這一點嗎?

編輯1:

對於它的價值,現在該方法是由callback(即before_save)執行。但我想讓用戶能夠手動觸發它。

+0

您掛接到調用模型方法的控制器方法的途徑。 –

回答

0

@meagar指出,做到這一點的方法是在我的控制器中創建一個自定義操作,然後創建一個路由,然後在我的視圖中使用link_to中的那條命名路由。

Client#Controller現在有這個方法:

def update_score 
    @client = current_user.clients.find(params[:id]) 
    @client.set_score 

respond_to do |format| 
    if @client.update_attributes(params[:client]) 
    format.html { redirect_to clients_url, notice: 'Score was successfully updated.' } 
    format.json { head :no_content } 
    else 
    format.html { render action: "edit" } 
    format.json { render json: @client.errors, status: :unprocessable_entity } 
    end 
    end 
end 

routes.rb現在有這條路線:

match ':controller/update_score/:id' => 'clients#update_score', :as => :update_score 

而且在我看來,我只是用這個鏈接,其中client是產生一個局部變量由塊。

<%= link_to 'Update Score', update_score_path(client) %> 
0

向控制器添加一個動作,該控制器調用模型上的方法,然後添加一條路線以允許請求到達該動作。讓你的鏈接調用該路線。

瀏覽器無法直接與模型對話。這就是控制器的用途。

+0

你介意只是顯示一些基本的代碼,請。 – marcamillion

+0

當然,你至少有一個控制器,至少有一個模型,並且至少有一條路線。這實際上是最簡單的Rails應用程序。查找並按照*任何*教程,你應該有你的答案。 – meagar

相關問題