Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何检查布尔值是真是假并更新值_Ruby On Rails_Ruby On Rails 3_Checkbox_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何检查布尔值是真是假并更新值

Ruby on rails 如何检查布尔值是真是假并更新值,ruby-on-rails,ruby-on-rails-3,checkbox,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 3,Checkbox,Ruby On Rails 4,我有两个相关的模型-旅游和预订。巡更具有“金额”属性。我使用一个复选框来确定金额是否根据用户输入(复选框)进行更改。默认值设置为false 目标: 我希望@tour.amount仅在勾选任一复选框时更改。我有以下内容,但无论是否选中复选框,它都会收取额外的费用。我错过了什么?我尝试将参数与0“0”进行比较,但没有效果 if @reservation.update_attribute(:option1, params[:option1]) == true || @reservation.updat

我有两个相关的模型-旅游和预订。巡更具有“金额”属性。我使用一个复选框来确定金额是否根据用户输入(复选框)进行更改。默认值设置为false

目标:
我希望@tour.amount仅在勾选任一复选框时更改。我有以下内容,但无论是否选中复选框,它都会收取额外的费用。我错过了什么?我尝试将参数与0“0”进行比较,但没有效果

if @reservation.update_attribute(:option1, params[:option1]) == true || @reservation.update_attribute(:option2, params[:option2]) == true
   @tour.amount = @tour.amount + 1500
else
   @tour.amount = @tour.amount
end
参数:

Params (unchecked)
"option 1"=>"0", "option 2"=>"0"
Params (checked)
"option 1"=>"0", "option 2"=>"0"
 def new
    @reservation = Reservation.new
    @tour = Tour.find(params[:tour_id])
  end

 def create
    @tour = Tour.find(params[:tour_id])
    @reservation = Reservation.new(reservation_params)

    if @reservation.update_attribute(:option1, params[:option1]) == true || @reservation.update_attribute(:option2, params[:option2]) == true
       @tour.amount = @tour.amount + 1500
    else
       @tour.amount = @tour.amount
    end

    if @reservation.save
      Stripe::Charge.create(
        :amount => @tour.amount, # amount in cents, again
        :currency => "usd",
        :card => params[:stripeToken]
      )
      flash[:success] = "Your reservation has been booked for #{@reservation.passengers} person(s). Please save this info."
      redirect_to new_tour_reservation_path(@tour)
    else
      render 'new'
    end
  end
控制器:

Params (unchecked)
"option 1"=>"0", "option 2"=>"0"
Params (checked)
"option 1"=>"0", "option 2"=>"0"
 def new
    @reservation = Reservation.new
    @tour = Tour.find(params[:tour_id])
  end

 def create
    @tour = Tour.find(params[:tour_id])
    @reservation = Reservation.new(reservation_params)

    if @reservation.update_attribute(:option1, params[:option1]) == true || @reservation.update_attribute(:option2, params[:option2]) == true
       @tour.amount = @tour.amount + 1500
    else
       @tour.amount = @tour.amount
    end

    if @reservation.save
      Stripe::Charge.create(
        :amount => @tour.amount, # amount in cents, again
        :currency => "usd",
        :card => params[:stripeToken]
      )
      flash[:success] = "Your reservation has been booked for #{@reservation.passengers} person(s). Please save this info."
      redirect_to new_tour_reservation_path(@tour)
    else
      render 'new'
    end
  end
解决方案: (不要想得太多!)


如果参数为true或false,则检查更新属性调用是否成功。

如果参数为true或false,则检查更新属性调用是否成功。哇,好的。。显然我想得太多了。我已经用解决方案代码更新了我的原始问题。我知道这很混乱,所以任何建议/反馈都将非常受欢迎!非常感谢你!您实际上不需要最后一个,因为您只是将值设置为相同的值。另外,在Ruby中,如果@reservation.option1,您只需执行
,不需要
==true
,我添加了一个答案,尽管它不是很彻底。太好了,非常感谢!我已将您的解决方案标记为答案。:)