【问题标题】:Rails - How to use link_to to change a boolean in the database?Rails - 如何使用 link_to 更改数据库中的布尔值?
【发布时间】:2013-04-21 11:11:53
【问题描述】:

在我的应用程序中,我正在尝试创建一个允许用户提交项目提案的链接。当用户准备好提交审核时,用户会点击链接,这会导致布尔值“submitreview”被标记为真。

我按照这篇文章作为指导: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

rake 路线

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

【问题讨论】:

  • 为什么引号之间是“真”?它是一个字符串类型的列吗?如果不是,true 似乎更合适。
  • 我更新为 true 没有引号,但链接仍然没有将布尔值更新为 true。

标签: ruby-on-rails methods routes


【解决方案1】:

试试这个:

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 以提高可读性。

【讨论】:

  • 我已经相应地更新了 def submitreview、link_to 和 rake 路由。我有新的错误,但由于此链接,我的 new_project 路径现在无法呈现。请参阅我上面更新的问题。谢谢。
  • 如果没有路由匹配操作submitreview 而不是submit_review,这意味着您仍在某处使用submitreview。还要确保您已重新启动服务器。
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 2015-10-07
  • 2017-08-05
  • 1970-01-01
  • 2021-11-15
  • 2011-05-31
  • 2011-10-30
  • 2014-06-03
相关资源
最近更新 更多