gpt4 book ai didi

ruby-on-rails - Rails - 将字段添加到模型后的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 03:43:32 26 4
gpt4 key购买 nike

我有一个非常简单的用户模型。当我第一次创建它时,它具有三个字段 emailpassword_hashpassword_salt

我最近向该模型添加了一个字段,以允许用户设置显示名称,该字段被称为display。我使用了 this answer 中概述的方法.所以我在终端中输入的内容将如下所示:

script/rails g migration add_display_to_users display:string

然后

rake db:migrate

这工作正常,在修改我的注册表单后,我能够将这些数据添加到数据库中。

在我的应用程序布局中,我想在标题中显示用户的显示名称。因此,在我的应用程序 Controller 中,我在每个 Controller 中都调用了一个方法来获取导航栏,称为 nav_bar。在此方法中,我还设置了一个 @user 实例变量,如果他们已登录的话。

因为在应用程序 Controller 中调用了 nav_bar 方法,所以我可以从应用程序布局中访问它。因此,我尝试在 header 中显示他们的电子邮件作为测试,如下所示:

<% if @user %>
<div class="ac_button">
<%= @user.email %>
</div>
<% end %>

这工作正常,并在标题中显示他们的电子邮件。但是,如果我将其更改为

 <%= @user.display %>

它不显示任何内容。

最奇怪的部分是,如果我在我的应用程序 Controller 或布局中调用 @user.email 或用户的任何其他属性。它有效,并显示他们的显示名称。我不知道为什么它会起作用,但它确实起作用了。

例如,如果在应用程序 Controller 中找到用户后,我调用 @user.email,它将在布局中显示他们的显示名称。

def nav_bar
if session[:user_id]
@user = User.find(session[:user_id])
@user.email
end
# create and return the navbar
end

或者如果在布局中,我在任何地方调用用户的属性,它也可以。

<div class="ac_button">
<% @user.password_hash %>
<%= @user.display %>
</div>

如果有人能解释这种非常奇怪的行为,我会感到很惊讶!

最佳答案

名称 display 是从 ActiveRecord::Base 继承的方法,因此当您创建名为 display 的列时,方法 display display= 被创建。因此,您通过创建列 display 来过度使用 ActiveRecord 方法。早些时候有这个问题,...将列重命名为 display_name 一切都很好! ;)

关于ruby-on-rails - Rails - 将字段添加到模型后的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8179982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com