ERB中当前用户变量没有方法错误

时间:2016-05-01 18:48:37

标签: ruby-on-rails variables erb nomethoderror

在我的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语句,我得到一个no方法错误,说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

任何人都可以帮我解释为什么我收到此错误消息?

2 个答案:

答案 0 :(得分:0)

您需要在用户模型中添加has_one方法。

有关人际关系的更多信息:

http://guides.rubyonrails.org/association_basics.html#the-has-one-association

编辑:

bal_code属性仅在bal_quiz模型中可用。所以不是用户。

答案 1 :(得分:0)

current_user返回表示当前用户的User对象。当您执行current_user.bal_code时,您正在调用该bal_code对象上的User方法。假设UserActiveRecord模型,如果名为bal_code的表包含字段users,则会响应bal_code。它没有,这就是你得到这个错误的原因。

因为你说你想知道“如果用户没有参加某个测验”,我认为你的视图在控制器的实例变量中得到了“某个测验”,比如@quiz。如果是,由于bal_quizzes包含字段baz_code,因此您的if语句应该看起来像<% if @quiz.bal_code.nil? ... %>而不是<% if current_user.bal_code.nil? ... %>