在我的应用程序中,我试图创建一个链接,该链接将允许用户提交项目建议。当用户准备好将其提交以供审阅时,用户将单击该链接,这将使布尔值“submitreview”标记为true。

我按照这篇文章作为指导:Rails 3 how do I use link_to to change the value of a boolean in the db?

目前,布尔值不会从false更改为true,它还会重定向到以下URL:http://localhost:3000/projects?submitreview=false
任何帮助将不胜感激,谢谢!

*更新* 我已经按照建议更新了以下代码,并在单击链接后成功更新了布尔值。应该注意的是,包含链接的“表单”也呈现在新的项目表单上。所以我现在的问题是,当我单击新项目<%= link_to 'Start your project', new_project_path %>时,出现以下新错误。当我删除表单中的link_to Submitreview时,不会出现错误,并且new_project呈现得很好。我的猜测是new_project尚未为该项目创建ID,而def submitreview中有一个调用。这可以解决吗?

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

projects / _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

最佳答案

试试这个:

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 %>

最后一点:您可能希望将所有submitreview更改为submit_review,以提高可读性。

关于ruby-on-rails - Rails-如何使用link_to更改数据库中的 bool 值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16250648/

10-13 02:14