【发布时间】:2014-08-12 20:15:55
【问题描述】:
如果以前有人问过这个问题,我很抱歉,但我在这里找不到答案。
我最近创建了一个 date_regex 验证方法来验证日期
VALID_DATE_REGEX = /\d{2}[\/]\d{2}[\/]\d{4}/
我知道正则表达式现在不好,我稍后会更新,但我不需要任何帮助。
我添加了一个字段,让用户可以选择他们的生日。我必须更新我的用户模型以允许此类功能。
迁移文件
class AddAgeToUsers < ActiveRecord::Migration
def change
add_column :users, :age, :integer
add_column :users, :birthday, :date
add_column :users, :location, :string
end
end
这是我在 Users.rb 中的验证
validates :birthday, format: { with: VALID_DATE_REGEX }, :on => :update
为了找出问题所在,我启动了 Rails 控制台
u = User.find(1)
u.update_attributes(:birthday => '12/22/1992')
=> u.save (false)
u.errors.full_messages
=> Birthday is invalid
u.birthday
=> nil
看起来问题是我希望生日的值是“1992 年 12 月 22 日”,但实际上是 nil。
我发现这就是数据库中没有更新记录的原因。不知道是不是属性存储为日期的问题,但它不起作用。
用户控制器
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to @user
flash[:success] = "Your profile has been updated"
else
render 'edit'
end
end
用户编辑页面
<% @title = "Edit Profile" %>
<h2>Update your information here</h2>
<div class = "center">
<%= form_for @user do |f| %>
<p>
<%= f.label :name, 'Username', class: 'marker' %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :email, class: 'marker' %>
<%= f.text_field :email %>
</p>
<p>
<%= f.label :birthday, class: 'marker' %>
<%= f.text_field :birthday %>
</p>
<p>
<%= f.label :location, class: 'marker' %>
<%= f.text_field :location %>
</p>
<p>
<input class="btn btn-primary" type="submit" value="Update">
</p>
<% end %>
</div>
感谢您的帮助。
更新
我将生日属性更改为字符串类型。现在,当我在控制台中运行 update_attributes(:birthday) 时,它会保存,但是当我在文本框中键入相同的内容时,它不会保存。
我想不通。
【问题讨论】:
标签: ruby-on-rails ruby regex null updating