0

在我的 Rails 应用程序中,我希望持续向用户显示警告通知以更新他们的个人资料,直到他们这样做。具体来说,我希望他们尽快填写他们的姓名,但我不希望他们在注册期间这样做。所以我在我的应用程序布局中加载的部分中编写了以下内容:

<% if user_signed_in? && current_user.profile.name == nil %>
    <div class="alert alert-warning alert-dismissable">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    Please fill in your Profile as soon as possible. This information is important for you to use the application properly.     
    <%= link_to "Do it now", edit_profile_path(current_user) %>
    </div>
<% end %>

但是,我觉得这是一种非常笨拙的方法。首先,这意味着每次登录用户访问页面时,都会对其个人资料进行数据库检查。其次,它是视图中的逻辑。

所以我的问题是,什么是更“Rails 方式”来做到这一点?以某种方式将逻辑移动到应用程序控制器中?将逻辑结果加载到会话变量或其他东西中,以便不需要在每次页面加载时检查数据库?

4

2 回答 2

0

在您的模型中添加:

def need_to_update_profile?
  profile.name.blank?
end

这将从视图中删除逻辑。不幸的是,检查数据库的问题很难避免。好处是rails缓存了sql结果,所以实际上不会进行太多的数据库调用。

于 2013-09-11T13:21:51.427 回答
0

将其保存在会话中仍然比每次在数据库中检查要好,但问题是每次用户更改他/她的个人资料时,您都必须保持会话同步。其次,这个逻辑不应该去模型使其干燥,你可以将它移动到助手中,因为逻辑适用于视图而不是业务逻辑。

希望这会有所帮助。

于 2013-09-11T13:34:24.153 回答