我用过Rails4.2.8
,数据库是Mysql
.
我的数据库表有很多columns
:name
,phone
,email
,address
等等。
当用户更改时name
,记录更改发生的时间,然后告诉用户“您可以在 30 天后更改您的姓名”。
我怎样才能让用户更改发生时间?
比如这张图:
我的数据库已经有了created_at
and updated_at
,但是我发现当我更新用户信息时(不仅是name
),它updated_at
会改变,但是现在我想要当用户改变时name
,我可以获得改变发生时的时间记录。这是我的一些数据库:
++++++++++++**************************************** **++++++++++++++++
我曾尝试使用@DickieBOy 并更改了一些代码,但是当我更新用户信息时,No route matches [POST]
出现错误?我哪里做错了?请帮我 。
我的一些代码user.rb
:
validate :name_change
def name_change
if name_changed?
self.name_updated_at = Time.now
end
end
extend FriendlyId
friendly_id :name, :use => [:slugged, :finders]
def should_generate_new_friendly_id?
name_changed?
end
我的一些代码user_helper.rb
:
def edit_day
edit_days = (@user.name_updated_at + 30.days).to_i
ctime = Time.now.to_i
st = (edit_days - ctime) / 1.day
if st > 0
return st
else
return 0
end
end
还有我的一些代码_form.html.erb
:
<%= form_for @user do |f| %>
<div class="user_profile-infoEdit">
<%= f.label :name, "name", class: "userLabel " %>
<%= f.text_field :name, class: "userNameEdit" %>
<br>
<span class="text-gray fs12">30days can change one time
<span>Have
<span id="editDays"><%= edit_day %></span>
days can you change your name
</span>
</span>
</div>
<% end %>
我发现def edit_day
,当我更新用户时,它总是会the No route matches [POST] "/users/udaskffa"
出错?我应该怎么办?谢谢。
添加一个名为name_updated_at
. 默认为创建日期。
Rails 有一个功能,您可以检查是否有更改。
name_of_field_changed?
在这种情况下:
name_changed?
我建议在验证中检查这一点。
validate :name_change_is_outside_of_day_limit, if: name_changed?
def name_change_is_outside_of_day_limit
if name_updated_at && name_updated_at < Date.today - 30.days
errors.add(:name, "can't be changed within 30 days of the last change.")
end
end
这是未经测试的,但它应该可以工作。
当您调用save
记录时,它将无法通过验证。然后可以将该消息返回给用户。
这与在模型级别执行的公认答案不同。这是应该包含验证的地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句