Ruby on rails 为用户更新单个属性
我有一个用户表,创建用户后,我想用下面的代码编辑一个属性。这是我的用户编辑视图:Ruby on rails 为用户更新单个属性,ruby-on-rails,ruby,forms,update-attributes,Ruby On Rails,Ruby,Forms,Update Attributes,我有一个用户表,创建用户后,我想用下面的代码编辑一个属性。这是我的用户编辑视图: <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_A
<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 user_params
params.require(:user).permit(:first_name, :surname, :previous_award, :chosen_award, :email, :password, :password_confirmation, :extra_activity)
end
最初创建用户时,:extra_activity
设置为0。当用户单击编辑表单上的提交时,不会发生任何事情,用户将被重定向到home\u路径
。我只需要将用户的:extra_activity
属性更新为他们在表单中选择的任何内容。有人能告诉我哪里出了问题吗?不确定如何将所选号码保存为:extra\u 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
class用户
阅读您的评论并查看更新后,我想解决方案是添加:
验证:password,长度:{minimum:3},if::password
密码很可能以哈希形式存储,而不是在password
列中。因此,如果重新加载用户,则不会设置属性。
验证应该是:如果设置了密码,那么请确保密码长度至少为3(相当短)
通过此控制器更新用户时,您应该确保存储的密码没有更改。您可以发布即将通过的参数哈希吗?我不确定您所说的参数哈希是什么意思-我在哪里可以找到它?在更新操作中,执行a:p params.inspect获取从日志返回的任何内容。参数:{“utf8”=>”✓“,”真实性令牌“=>”hgnJEi/uzuckBeX6D6d0sJwPswRdcKxq9U5ieGr32eX8OLb40Q2ITg9U6H/uonC8YnbUpGb6Hjwbz1WdVgqgbQ==”,”用户“=>,”额外活动“=>”1“,”提交“=>”提交“,”id“=>”1“}
这就是你的意思吗?@hade谢谢你的帮助。帕斯卡下面的答案奏效了!
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