2016-05-01 13 views
0

私のレールアプリでは、ユーザーが特定のクイズを取っていない場合は空白のチェックボックスを表示しますが、チェックボックスがある場合はerbを使用します。 ERBの現在のユーザ変数のメソッドエラーがありません

<% 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 current_user.gender.nil? %>を使用する/ 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

ユーザーモデルにhas_oneメソッドを追加する必要があります。関係についての

詳細情報:

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

編集:

bal_code属性はbal_quizモデルでのみ使用可能です。だから、ユーザーではない。

+0

<% if @quiz.bal_code.nil? ... %>のようになります。私は 'current_user.bal_quiz.nil?'を回避策として使い終わったが、 'bal_quiz'モデルの中で一つの変数が存在するかどうかをチェックする必要があるなら、どうすればいいのかまだ分かっていないクイズそのもの? – Liz

0

current_userは、現在のユーザを表すUserオブジェクトを返します。 current_user.bal_codeを実行しているときは、そのUserオブジェクトのbal_codeメソッドを呼び出しています。 UserActiveRecordモデルであると仮定すると、テーブルにフィールドbal_codeが含まれている場合はbal_codeに応答します。そうではありません。そのため、このエラーが発生しています。

"あなたが特定のクイズを取っていないかどうか"を知りたいと思っているので、@quizのようなコントローラーのインスタンス変数でそのビューに「特定のクイズ」が得られると仮定します。もしそうならbal_quizzesがフィールドbaz_codeが含まれているので、あなたのif文は、あなたがbal_code変数はbal_quizモデル以外では利用できなかったということだね代わり<% if current_user.bal_code.nil? ... %>

関連する問題