Rails:以正确的方式设置属性

时间:2014-03-25 05:19:50

标签: ruby-on-rails ruby ruby-on-rails-3

我的Plan模型中有一个数据库属性

t.integer "adult_only", :default => 1

现在我想设置adult_only = 0的值,如果user.intern?有什么轨道方式可以做到这一点?我应该在Plans controllerview或其他地方执行此操作吗?

修改

现在我的方案是,当我创建新计划时,我想根据检查user.intern?设置adult_only值,我想到的第一件事是在{{1}中执行此操作new的行动,建议?

关系如下:

PlansControllerUser has_many Proposals

2 个答案:

答案 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