2013-04-27 76 views
3

在我的應用程序中,我試圖創建一個允許用戶提交項目建議的鏈接。當用戶準備好提交審查時,用戶將點擊鏈接,這會導致布爾「submitreview」被標記爲true。Rails - 如何使用link_to更改數據庫中的布爾值?

我關注此帖作爲參考:Rails 3 how do I use link_to to change the value of a boolean in the db?

眼下,布爾不會從虛假到真實的改變,它也被重定向到以下網址:http://localhost:3000/projects?submitreview=false

任何幫助,將不勝感激,謝謝!

*更新*根據建議更新了以下代碼,並在點擊鏈接後成功更新了布爾值。應該注意的是,這個包含鏈接的「表單」也會顯示在新的項目表單上。所以現在我的問題是,當我點擊新項目<%= link_to 'Start your project', new_project_path %>時,我在下面得到以下新錯誤。當我刪除表單中的link_to submitreview時,不會出現錯誤,並且new_project呈現出色。我的猜測是,new_project尚未爲該項目創建一個ID,但在中有一個呼叫。這可以解決嗎?

Routing Error 
No route matches {:action=>"submitreview", :controller=>"projects", :id=># ... } 

項目/ _form.html.erb

<%= link_to "Submit Proposal", submitreview_project_path(@project), method: :put, class: "btn btn-primary" %> 

projects_controller.rb

def submitreview 
    @project = Project.find(params[:id]) 
    @project.update_attributes(submitreview: true) 
    redirect_to project_path(@project) 
end 

的routes.rb

resources :projects do 
    member do 
     get :submitreview 
     put :submitreview 
    end 
end 

耙路線

submitreview_project GET /projects/:id/submitreview(.:format)     projects#submitreview 
        PUT /projects/:id/submitreview(.:format)     projects#submitreview 
+0

爲什麼報價之間是「真實的」?它是一個字符串類型列嗎?如果不是,「真」似乎更合適。 – giorgian 2013-04-27 09:56:26

+0

我更新爲'true',沒有引號,但鏈接仍然不會將布爾值更新爲true。 – spl 2013-04-27 10:04:57

回答

6

試試這個:

def submitreview 
    @project = Project.find(params[:id]) 
    @project.update_attributes(submitreview: true) 
    redirect_to projects_path(submitreview: false) 
end 

此外,運行rake routes,以確保該航線是PUT而不是GET

您可以簡化link_to爲好,可以說該航線是submitreview_projects

<%= link_to "Submit Proposal", submitreview_projects_path(@project), method: :put %> 

最後一點:你可能想改變你所有的submitreviewsubmit_review更好的可讀性。

+0

我已經更新了def submitreview,link_to和rake路由。我有新的錯誤,雖然由此產生的結果是我的new_project路徑現在無法呈現,因爲這個鏈接。請參閱我上面的更新問題。謝謝。 – spl 2013-04-27 16:46:00

+0

如果沒有路由匹配action'submitreview'而不是'submit_review',這意味着你仍然在某處使用'submitreview'。另外確保你已經重新啓動你的服務器。 – 2013-04-28 01:32:24