3

在我的应用程序中,我试图创建一个允许用户提交项目提案的链接。当用户准备提交它以供审核时,用户将单击该链接,这会导致布尔值“submitreview”被标记为 true。

我按照这篇文章作为指导:Rails 3 如何使用 link_to 更改数据库中布尔值的值?.

现在,布尔值不会从 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=>#  ... }

项目/_form.html.erb

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

项目控制器.rb

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

路线.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
4

1 回答 1

6

试试这个:

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

另外,运行rake routes以确保路线是 aPUT而不是 a GET

你也可以简化你link_to的,假设路线是submitreview_projects

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

最后一点:您可能希望将所有内容更改submitreview为以submit_review获得更好的可读性。

于 2013-04-27T10:31:05.327 回答