spl*_*spl 3 methods routes ruby-on-rails
在我的应用程序中,我正在尝试创建一个允许用户提交项目提案的链接.当用户准备提交以供审阅时,用户将单击该链接,这会导致布尔"submitreview"被标记为true.
我按照这篇文章作为指南:Rails 3如何使用link_to来更改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=># ... }
Run Code Online (Sandbox Code Playgroud)
项目/ _form.html.erb
<%= link_to "Submit Proposal", submitreview_project_path(@project), method: :put, class: "btn btn-primary" %>
Run Code Online (Sandbox Code Playgroud)
projects_controller.rb
def submitreview
@project = Project.find(params[:id])
@project.update_attributes(submitreview: true)
redirect_to project_path(@project)
end
Run Code Online (Sandbox Code Playgroud)
的routes.rb
resources :projects do
member do
get :submitreview
put :submitreview
end
end
Run Code Online (Sandbox Code Playgroud)
耙路线
submitreview_project GET /projects/:id/submitreview(.:format) projects#submitreview
PUT /projects/:id/submitreview(.:format) projects#submitreview
Run Code Online (Sandbox Code Playgroud)
试试这个:
def submitreview
@project = Project.find(params[:id])
@project.update_attributes(submitreview: true)
redirect_to projects_path(submitreview: false)
end
Run Code Online (Sandbox Code Playgroud)
另外,运行rake routes以确保路由是a PUT而不是a GET.
你也可以简化你的link_to,让我们说路线是submitreview_projects:
<%= link_to "Submit Proposal", submitreview_projects_path(@project), method: :put %>
Run Code Online (Sandbox Code Playgroud)
最后一点:你可能想改变你的一切submitreview,以submit_review获得更好的可读性.