ERB 中当前用户变量没有方法错误
No Method Error for Current User Variables in ERB
在我的 rails 应用程序中,如果用户没有参加某个测验,我会使用 erb 显示一个空白复选框的图像,如果他们参加了,则显示一个复选框。我的 if 语句是:
<% if current_user.bal_code.nil? || current_user.flex_code.nil?%>
<a href="app/views/users/show.html.erb"><%= image_tag "Checkbox Blank.png", class: "sf-checkbox", alt: "Blank Checkbox"%>
<h5><strong>Step 4: <br class="xs-none"></strong>Finish Your Profile</h5></a>
<% else %>
<%= image_tag "Checkbox Green.png", class: "sf-checkbox", alt: "Checked Checkbox"%>
<h5><strong>Step 4: <br class="xs-none"></strong>Finish Your Profile</h5>
<% end %>
对于这个 if 语句,我得到一个无方法错误说 undefined method 'bal_code' for #<User:0x007fd7edc41040>
,但是我使用 <% if current_user.gender.nil? %>
的之前的 if/else 语句工作得很好。我无法弄清楚为什么 current_user.gender
有效,但 current_user.bal_code
却抛出错误?
如果有帮助,这是我的 application.html.erb
代码(在每页的页脚上)。以下是我的架构中适当的数据库结构:
create_table "bal_quizzes", force: :cascade do |t|
t.integer "user_id"
...
t.string "bal_code"
end
add_index "bal_quizzes", ["user_id"], name: "index_bal_quizzes_on_user_id"
...
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.string "password_digest"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "gender"
...
end
谁能帮我解决为什么会收到此错误消息?
您需要在用户模型中添加一个 has_one 方法。
有关关系的更多信息:
http://guides.rubyonrails.org/association_basics.html#the-has-one-association
编辑:
bal_code 属性仅在 bal_quiz 模型中可用。所以不在用户身上。
current_user
returns 代表当前用户的 User
对象。当您执行 current_user.bal_code
时,您正在调用该 User
对象上的 bal_code
方法。假设 User
是一个 ActiveRecord
模型,如果名为 users
的 table 包含字段 bal_code
,它会响应 bal_code
。它没有,这就是您收到该错误的原因。
既然你说你想知道 "if the user has not taken a certain quiz",我假设你的视图从控制器的实例变量中得到 "certain quiz",比如 @quiz
。如果是这样,因为 bal_quizzes
包含字段 baz_code
,您的 if 语句应该看起来像 <% if @quiz.bal_code.nil? ... %>
而不是 <% if current_user.bal_code.nil? ... %>
在我的 rails 应用程序中,如果用户没有参加某个测验,我会使用 erb 显示一个空白复选框的图像,如果他们参加了,则显示一个复选框。我的 if 语句是:
<% if current_user.bal_code.nil? || current_user.flex_code.nil?%>
<a href="app/views/users/show.html.erb"><%= image_tag "Checkbox Blank.png", class: "sf-checkbox", alt: "Blank Checkbox"%>
<h5><strong>Step 4: <br class="xs-none"></strong>Finish Your Profile</h5></a>
<% else %>
<%= image_tag "Checkbox Green.png", class: "sf-checkbox", alt: "Checked Checkbox"%>
<h5><strong>Step 4: <br class="xs-none"></strong>Finish Your Profile</h5>
<% end %>
对于这个 if 语句,我得到一个无方法错误说 undefined method 'bal_code' for #<User:0x007fd7edc41040>
,但是我使用 <% if current_user.gender.nil? %>
的之前的 if/else 语句工作得很好。我无法弄清楚为什么 current_user.gender
有效,但 current_user.bal_code
却抛出错误?
如果有帮助,这是我的 application.html.erb
代码(在每页的页脚上)。以下是我的架构中适当的数据库结构:
create_table "bal_quizzes", force: :cascade do |t|
t.integer "user_id"
...
t.string "bal_code"
end
add_index "bal_quizzes", ["user_id"], name: "index_bal_quizzes_on_user_id"
...
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.string "password_digest"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "gender"
...
end
谁能帮我解决为什么会收到此错误消息?
您需要在用户模型中添加一个 has_one 方法。
有关关系的更多信息:
http://guides.rubyonrails.org/association_basics.html#the-has-one-association
编辑:
bal_code 属性仅在 bal_quiz 模型中可用。所以不在用户身上。
current_user
returns 代表当前用户的 User
对象。当您执行 current_user.bal_code
时,您正在调用该 User
对象上的 bal_code
方法。假设 User
是一个 ActiveRecord
模型,如果名为 users
的 table 包含字段 bal_code
,它会响应 bal_code
。它没有,这就是您收到该错误的原因。
既然你说你想知道 "if the user has not taken a certain quiz",我假设你的视图从控制器的实例变量中得到 "certain quiz",比如 @quiz
。如果是这样,因为 bal_quizzes
包含字段 baz_code
,您的 if 语句应该看起来像 <% if @quiz.bal_code.nil? ... %>
而不是 <% if current_user.bal_code.nil? ... %>