我倾向于不同意将 attr_accessors 用于特定于操作的入口元素的方法。如果需要记录 Ts&C,那么这是有道理的,但有时您需要的数据确实与模型无关,并且仅与手头的特定操作相关,例如“在执行操作时执行一些重量级操作”。
假设您有一个注册表单,并且您没有使用 OAuth,并且您可以选择在注册时指定 twitter 用户名和密码。这很好:
<%= form.input :twitter_username %>
<%= form.input :twitter_password, :as => :password %>
但是下面的这一点让我感到困惑——在这种情况下,它就像形式化实际上是在带走已经存在的东西。有没有办法在添加 params[:your-object] 的同时仍然保持形式化来完成所有可爱的布局内容?
怎么样:
class User < ActiveRecord::Base
...
#I don't want this here. Its only for UserController#create.
#attr_accessor :tweet_when_signed_up
...
end
和:
<%= form.input :tweet_when_signed_up, :as => :checkbox, :param_only => true %>
param_only 是我虚构的建议。它说'这甚至不是一个瞬态属性。它只是为了这个动作。
class UserController < ActionController::Base
...
def create
if params[:tweet_when_signed_up] # haven't done this yet -- == 1 or !.nil?
Tweeter.tweet( ... )
end
@user = User.create( params[:user] )
end
这样做的能力可能就在那里——有人知道如何有效地做我认为上面的好主意吗?
谢谢!