Нет ошибки метода для текущих пользовательских переменных в 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 %>

Я получаю сообщение об ошибке "нет метода" undefined method 'bal_code' for #<User:0x007fd7edc41040> для этого оператора if, но для предыдущего оператора if / else, в котором я использовал <% if current_user.gender.nil? %> работал отлично. Я не могу понять, почему 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 ответа

Решение

Вам нужно добавить метод has_one в вашу пользовательскую модель.

Больше информации об отношениях:

http://guides.rubyonrails.org/association_basics.html

Редактировать:

Атрибут bal_code доступен только в модели bal_quiz. Так что не на пользователя.

current_user возвращает User объект, представляющий текущего пользователя. Когда вы делаете current_user.bal_codeВы вызываете bal_code метод на этом User объект. Если предположить, User является ActiveRecord модель, она реагирует на bal_code если таблица называется users содержит поле bal_code, Это не так, и именно поэтому вы получаете эту ошибку.

Поскольку вы говорите, что хотите знать, "если пользователь не прошел определенный тест", я предполагаю, что ваш взгляд получает этот "определенный тест" в переменной экземпляра из контроллера, например @quiz, Если так, то с bal_quizzes содержать поле baz_codeВаше заявление if должно выглядеть так <% if @quiz.bal_code.nil? ... %> вместо <% if current_user.bal_code.nil? ... %>

Другие вопросы по тегам