Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 使用Rails 4在模型上的状态之间切换 情景_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 使用Rails 4在模型上的状态之间切换 情景

Ruby on rails 使用Rails 4在模型上的状态之间切换 情景,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我的数据库中有一个名为budgets的表。它有作者id,状态,在列中回答 目标 当状态!=1,则作者id和处回答的应为nil/null 问题 我在我的预算\u controller.rb上有以下方法: def update budget = Budget.find(params[:id]) budget.update_attributes(status: 1, author_id: current_user.id, answered_at: DateTime.now.to_date)

我的数据库中有一个名为
budgets
的表。它有
作者id
状态
列中回答

目标 当
状态!=1
,则作者id和处回答的应为
nil
/
null

问题 我在我的
预算\u controller.rb上有以下方法:

def update
  budget = Budget.find(params[:id])
  budget.update_attributes(status: 1, author_id: current_user.id, answered_at: DateTime.now.to_date)

  budget.save!
end
我想知道是否可以重复使用相同的方法(
update
)将
作者id
处回答的
更改为null,如果它已经是
1
,则将
状态本身更改为
0
。某种类型的
切换

知识
我看到Rails提供了切换布尔值的功能,但我看不出它如何满足我的需要,因为我正在处理另外两个不是布尔值的列。

我想你可能需要一个。在你的例子中,类似于

# on models/budget.rb

before_update :nullify_author

def nullify_author
  if status == 1
    author = nil
    answered_at = nil
    status = 0
    save
  end
end

此外,您不应该在此处使用
切换
。Ruby的缺点比JavaScript的限制性强得多。在Ruby的例子中,只有
false
nil
是错误的。与你相关的是,0不是虚假的,而是真实的。要证明这一点,请尝试
!0
。返回的值是boolean
false
而不是FixNum 1

我想您可能想要的是一个。在你的例子中,类似于

# on models/budget.rb

before_update :nullify_author

def nullify_author
  if status == 1
    author = nil
    answered_at = nil
    status = 0
    save
  end
end

此外,您不应该在此处使用
切换
。Ruby的缺点比JavaScript的限制性强得多。在Ruby的例子中,只有
false
nil
是错误的。与你相关的是,0不是虚假的,而是真实的。要证明这一点,请尝试
!0
。返回的值是布尔值
false
而不是FixNum 1

我喜欢你的方法。很有创意!谢谢我会反复讨论它应该是更新前还是更新后,但重要的是将这种逻辑放在模型中,而不是控制器中。我喜欢你的方法。很有创意!谢谢我会反复讨论它应该是更新前还是更新后,但重要的是将这种逻辑放在模型中,而不是控制器中。