2013-04-27 74 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