【问题标题】:Rails undefined method `update_attributes' for false:FalseClassRails未定义的方法`update_attributes' for false:FalseClass
【发布时间】:2017-05-25 00:34:04
【问题描述】:

如果争议保存更改订单 boolean false 为 true 但是在创建 rails log show 之后

false:FalseClass 的未定义方法 `update_attributes'

有人知道为什么吗?

order 
has_one :dispute

dispute
belongs_to :order


def create
    if   current_user == @order.buyer



      dispute = @order.dispute.nil? ? Dispute.new : @order.dispute

      if dispute.save
@order = params[:dispute_status] == "1"

         @order.update_attributes(:dispute_status => true)

        redirect_to order_dispute_path(@order, @dispute)
        flash[:success] = 'yess'

      else
        flash[:error] = 'Erro'
        redirect_to :back
      end
    end
  end

如果我删除 @order.update_attributes(:dispute_status => true)

日志显示:

ActionController::RoutingError (没有路由匹配 {:action=>"create", :controller=>"争议", :order_id=>false, :format=>nil}

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems


【解决方案1】:

你有@order = params[:dispute_status] == 1。这将返回一个布尔值。在你的情况下,可能是错误的。所以现在 @order 是一个布尔值 false 并且您正尝试对其调用 update_attributes。

【讨论】:

  • 不是什么?不是布尔值?不,我很确定@order 您编写它的方式使其成为布尔值,因为您将其设置为 params[:dispute_status] == 1 的返回值
【解决方案2】:

FalseClass.instance_methods.include?(:update_attributes) # false ActiveRecord::Base.instance_methods.include?(:update_attributes) # true 您的 @order 不是 ActiveRecord::Base 实例!清楚吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多