更新用户的单个属性
Updating a single attribute for a user
我有一个用户 table,创建用户后我想使用以下代码编辑一个属性。这是我的用户编辑视图:
<h1>Please select below</h1>
<%= form_for @user do |f| %>
<div class="form-group">
<%= f.label :extra_activity %>
<%= f.select(:extra_activity, [['P_Act', 1],['Ph_Act', 2], ['C_Act', 3]], class: 'form-control', required: true) %></br>
</div>
<%= f.submit 'Submit', class: 'btn btn-primary btn-lg' %>
<% end %>
在我的用户控制器中,我有以下编辑和更新方法:
def edit
@user = User.find(params[:id])
@users = User.all
@user_id = params[:user_id]
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to new_user_activity_path(@user)
else
redirect_to home_path
end
end
user_params
如下:
def user_params
params.require(:user).permit(:first_name, :surname, :previous_award, :chosen_award, :email, :password, :password_confirmation, :extra_activity)
end
当我最初创建用户时,:extra_activity
设置为 0。当用户在编辑表单上单击提交时,没有任何反应,用户被重定向到 home_path
。我只需要将用户的 :extra_activity
属性更新为他们在表单中 select 的任何内容。有人可以建议我哪里出错了吗?不确定如何保存 selected 数字,作为 :extra_activity
的更新值
更新:
class User < ActiveRecord::Base
has_many :activities, dependent: :destroy
has_many :weeks, dependent: :destroy
authenticates_with_sorcery!
validates :password, length: { minimum: 3 }
validates :password, confirmation: true
validates :email, uniqueness: true, email_format: { message: 'has invalid format' }
end
阅读您的评论并检查更新后,我想解决方案是添加:
validates :password, length: { minimum: 3 }, if: :password
密码很可能以散列形式存储,而不是在 password
列中。因此,如果您重新加载用户,则不会设置该属性。
验证应该是:如果设置了密码,则确保它的长度至少为 3(非常短)。
您应该确保在通过此控制器更新用户时存储的密码没有被更改。
我有一个用户 table,创建用户后我想使用以下代码编辑一个属性。这是我的用户编辑视图:
<h1>Please select below</h1>
<%= form_for @user do |f| %>
<div class="form-group">
<%= f.label :extra_activity %>
<%= f.select(:extra_activity, [['P_Act', 1],['Ph_Act', 2], ['C_Act', 3]], class: 'form-control', required: true) %></br>
</div>
<%= f.submit 'Submit', class: 'btn btn-primary btn-lg' %>
<% end %>
在我的用户控制器中,我有以下编辑和更新方法:
def edit
@user = User.find(params[:id])
@users = User.all
@user_id = params[:user_id]
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to new_user_activity_path(@user)
else
redirect_to home_path
end
end
user_params
如下:
def user_params
params.require(:user).permit(:first_name, :surname, :previous_award, :chosen_award, :email, :password, :password_confirmation, :extra_activity)
end
当我最初创建用户时,:extra_activity
设置为 0。当用户在编辑表单上单击提交时,没有任何反应,用户被重定向到 home_path
。我只需要将用户的 :extra_activity
属性更新为他们在表单中 select 的任何内容。有人可以建议我哪里出错了吗?不确定如何保存 selected 数字,作为 :extra_activity
更新:
class User < ActiveRecord::Base
has_many :activities, dependent: :destroy
has_many :weeks, dependent: :destroy
authenticates_with_sorcery!
validates :password, length: { minimum: 3 }
validates :password, confirmation: true
validates :email, uniqueness: true, email_format: { message: 'has invalid format' }
end
阅读您的评论并检查更新后,我想解决方案是添加:
validates :password, length: { minimum: 3 }, if: :password
密码很可能以散列形式存储,而不是在 password
列中。因此,如果您重新加载用户,则不会设置该属性。
验证应该是:如果设置了密码,则确保它的长度至少为 3(非常短)。
您应该确保在通过此控制器更新用户时存储的密码没有被更改。