在我的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
任何人都可以帮我解释为什么我收到此错误消息?
答案 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
方法。假设User
是ActiveRecord
模型,如果名为bal_code
的表包含字段users
,则会响应bal_code
。它没有,这就是你得到这个错误的原因。
因为你说你想知道“如果用户没有参加某个测验”,我认为你的视图在控制器的实例变量中得到了“某个测验”,比如@quiz
。如果是,由于bal_quizzes
包含字段baz_code
,因此您的if语句应该看起来像<% if @quiz.bal_code.nil? ... %>
而不是<% if current_user.bal_code.nil? ... %>