我的Plan
模型中有一个数据库属性
t.integer "adult_only", :default => 1
现在我想设置adult_only = 0
的值,如果user.intern?
有什么轨道方式可以做到这一点?我应该在Plans controller
或view
或其他地方执行此操作吗?
修改
现在我的方案是,当我创建新计划时,我想根据检查user.intern?
设置adult_only值,我想到的第一件事是在{{1}中执行此操作new
的行动,建议?
关系如下:
PlansController
和User has_many Proposals
答案 0 :(得分:3)
@androidharry如果你想让它在视图中显示并给用户选择在保存到DB之前更改它(即在到达Model之前),那么你应该在控制器中以新的动作设置它。
def new
@plan = Plan.new(adult_only: (user.intern? ? 0 : 1))
end
答案 1 :(得分:2)
您可能希望使用Active Record回调
进行设置这是在更改模型的操作之前或之后运行的代码。
在这种情况下 - 您希望在创建新计划之前(即在保存新计划之前)执行此操作
代码本身非常简单。
在plan.rb中:
before_create :set_adult_only
def set_adult_only
return if defined?(self.adult_only)
self.adult_only = 0 if user.intern?
end