【发布时间】:2011-01-05 07:20:49
【问题描述】:
我发现自己经常在控制器中编写这段代码:
params[:task][:completed_at] = Time.parse(params[:task][:completed_at]) if params[:task][:completed_at]
不要纠结于我在这里具体做什么,因为原因每次都在变化;但在很多情况下,我需要检查 params 中的值并在将其交给 create 或 update_attributes 之前对其进行更改。
重复params[:task][:completed_at] 三次感觉很糟糕。有没有更好的方法来做到这一点?
【问题讨论】:
-
为什么要更改参数值?我问的是一般意义上的问题,以及这个具体的例子。
-
这并没有真正回答您的问题,但这似乎是模型端的
before_create或before_save中应该发生的事情类型。它也会看起来更漂亮一些,因为您不会拥有所有params[:task]业务。 -
@DougR:修复意味着模型将其属性值作为预期类型,这意味着哈希可以直接传递给#create()。正如所指出的,它不需要在控制器中完成。
-
@DougR:最常见的是当我需要在服务器端做一些我不想暴露给客户端的事情时。一个例子是用户在保存之前对模型进行标记:模型无法执行此操作,因为它看不到 current_user,所以我必须在控制器中自动执行此操作,以防止有人恶意更改关联用户。
标签: ruby-on-rails ruby idioms