But there is no problem when I do the following
a.username = "123" or a.id = "123"
a.save
Please help. Thank you very much.
Because the primary key is protected from mass assignment.
Fred
Thank you for your reply
Is that the only way to insert record like this?
a = User.new
a.username = "123"
a.display_name = "456"
a.save
The code is not elegant then.
In this situation, It is not allowed to use the scaffold code in
controller like this? It is not convenient if the primary key is not the
default "id" field.
@user = User.new(params[:user])
you just have to set the primary key manually.
@user = User.new(params[:user])
@user.username = params[:username]
@user.save
however for security reasons i would not advise to use mass-assignment
for user-creation anyways. there could be stuff like that in there:
>> params[:user][:is_admin]
=> "1"
a = User.new(:display_name => "456") do |u|
u.id = 123
end
a.save # or use .create in the first place rather than .new
However, if you have 'username' as the primary key, I'd strongly suggest that you reconsider that and follow the more conventional auto-incrementing integer primary key. Unless you have to deal with the structure of a legacy database, you'll save yourself a lot of trouble.