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
。返回的值是booleanfalse
而不是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我喜欢你的方法。很有创意!谢谢我会反复讨论它应该是更新前还是更新后,但重要的是将这种逻辑放在模型中,而不是控制器中。我喜欢你的方法。很有创意!谢谢我会反复讨论它应该是更新前还是更新后,但重要的是将这种逻辑放在模型中,而不是控制器中。