update_attributes
これを行う最も簡単な方法は、以下のように、パラメーターが関数に渡される前に、コントローラーの更新アクションでパラメーターを削除することです。
#UsersController
def update
params[:user].delete(:username)
@user = user.find(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully updated user."
redirect_to @user
else
render :action => 'edit'
end
end
または、このRailsCastに示すように、動的一括割り当てセキュリティを使用することもできます。この要点は、モデルの関数をオーバーライドして、mass_assignment_authorizer
一括割り当てにアクセスできるようにする属性を追加することです。そのアイデアを使用すると、次のようなことができます。
class User < ActiveRecord::Base
attr_accessible #what ever other stuff you wan't to accessable
private
def mass_assignment_authorizer
new_record? ? super + [:username] : super
end
end