Rails未定义方法`update_attributes' for false:FalseClass

时间:2017-05-25 00:34:04

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

如果争议保存更改,则将布尔值false设置为true 但在创建rails log show

之后
  

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

有人知道为什么吗?

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}

2 个答案:

答案 0 :(得分:0)

你有@order = params [:dispute_status] == 1.这会返回一个布尔值。在你的情况下,可能是假的。所以现在@order是一个布尔值false,你试图在它上面调用update_attributes。

答案 1 :(得分:0)

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