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