当使用路径传递时,我能否在控制器方法中使用布尔参数?

Am I able to use a boolean parameter in a controller method when it's passed using a path?

这是在我的索引视图中,我想访问类似的内容:false/true 参数

    <%= link_to like_theory_path(theory, like: true), method: :post do %>
      <i class="glyphicon glyphicon-thumbs-up"></i> 
      &nbsp
      <%= theory.thumbs_up_total %>
    <% end %>
    &nbsp
    &nbsp
    <%= link_to like_theory_path(theory, like: false), method: :post do %>
      <i class="glyphicon glyphicon-thumbs-down"></i>
      &nbsp
      <%= theory.thumbs_down_total %>
    <% end %>

这是我的控制器

    if :like

      if like.like
        like.delete
      else
        like.delete
        like = Like.create(like: params[:like], theorist: current_user,  theory: @theory)
        like.valid?
      end

  else
    binding.pry
    if like.like
      like.delete
      like = Like.create(like: params[:like], theorist: current_user, theory: @theory)
      like.valid?
    else
      like.delete
    end

  end

所以无论 :like 是真还是假,它都不会触发 else 语句。

我使用的是否正确,或者它在技术上根本不是一个参数?

link_to 助手通过 params 散列传递参数。 params 散列包含 string 类型的值,所以不,您不能传递布尔值。

然而,您可以做的是传递布尔值的其他表示形式,如“1”或“0”,或 "true" 或 "false",并创建一个实际的布尔值对应于那些在你的控制器方法中传递的值。

您可能想要创建一个虚拟属性,以便字符串 like 不会与模型的布尔值 like 字段冲突。