Ruby on rails 如何检查布尔值是真是假并更新值
我有两个相关的模型-旅游和预订。巡更具有“金额”属性。我使用一个复选框来确定金额是否根据用户输入(复选框)进行更改。默认值设置为false 目标: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
我希望@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
,我添加了一个答案,尽管它不是很彻底。太好了,非常感谢!我已将您的解决方案标记为答案。:)