在Rails 4中切换布尔值

时间:2015-06-07 08:14:26

标签: ruby-on-rails

我试图弄清楚如何在我的Rails 4应用程序中将布尔属性从true切换为true。我在早期版本的rails中已经阅读了很多类似的问题,但是路由和其他使得这些解决方案与我需要的不同的东西发生了变化。

我有一个项目模型,其中包含一个名为draft的属性。如果:草稿是假的,我想在我的节目中加入一个链接:草稿更新为真。

我已尝试过其他答案的几个js解决方案,但我无法弄清楚我需要的逻辑。

有人在Rails 4中做过这个吗?

我在下面尝试过Zoran的建议:

项目管理员:

 def toggle_draft
    @project = Project.find(params[:id])
    @project.draft = true
    @project.save
    redirect_to project_path(@project)
  end

项目展示:

  <% if @project.scope.finalise.draft %>
      <%= link_to toggle_draft_path(id: @scope.id)
  <% end %>

路线:

resources :finalise

  patch '/toggle-draft', to 'finalises#toggle_draft', as: 'toggle_draft'

我已经更新了我的模式,以创建一个名为scope的模型和一个名为finalize的模型。范围属于项目,Finalize属于Scope。

我已将Scope设置为接受Finalize和Projects的嵌套属性以接受Scope的嵌套属性。我在项目和范围中用白色标记了params并最终确定。

我现在在Finalize视图中有两个部分,一个用于草稿,一个用于finalize。在草案中,我尝试过:

<% if @project.scope.draft == true %>
    <%= link_to toggle_draft_path(id: @project.scope.id) %>
<% end %>

在我的终结控制器中,我有切换方法,改编自Zoran建议:

 def toggle_draft
    @finalise = Finalise.find(params[:id])
    @finalise.draft = true
    @finalise.save
    redirect_to project_path(@project)
  end

以上和我的路线是:

 resources :finalises
   patch '/toggle-draft', to 'finalises#toggle_draft', as: 'toggle_draft'

我尝试启动服务器来测试它,但是我收到一条错误,上面写着:

rb:4:语法错误,意外的tSTRING_BEG,期待keyword_do或&#39; {&#39;或&#39;(&#39;(SyntaxError)    补丁&#39; / toggle-draft&#39;,以及#tot;#finalggle#toggle_draft&#39;,as:...

当我对最终确定的路线进行评论并尝试启动服务器时,我会收到更多错误消息:

PG :: UndefinedColumn:错误:列finalises.scope_id不存在 第1行:SELECT&#34;敲定&#34;。* FROM&#34;敲定&#34;在哪里&#34;最终确定&#34;。&#34; s ...

我的终结表有一个scopes_id(整数)列。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作来完成项目的草稿切换:

  1. 在您的展示页面上显示该链接的路线:
  2. <强> routes.rb中:

    patch '/toggle-draft', to: 'projects#toggle_draft', as: 'toggle_draft'
    
    1. 在ProjectsController中定义toggle_draft
    2. <强> projects_controller.rb

      def toggle_draft
        @project = Project.find(params[:id])
        @project.draft = true
        @project.save
        redirect_to project_path(@project)
      end
      
      1. 最后,在您的展示页面标记中,您可以有条件地显示链接:
      2. <强>项目/ show.html.erb:

        <% if @project.draft %>
          <%= link_to 'Toggle', toggle_draft_path(id: @project.id), method: :patch %>
        <% end %>
        

        希望这有用。