2017-02-01 4 views
0

私のアプリケーションでは、ユーザーは宿題を完了したと言うことができます。Rails - フィールドにデータが設定されている場合にイメージをレンダリングする方法は?

「completed_on」フィールドには、宿題が完了した日付が入力されます。完了していない場合は、フィールドは空白です。

宿題が完了している場合はティック、宿題が完了していない場合はxを表示します。

「completed_on」という列は、「宿題」という表にあります。

を私のモデルで:

def getCompletion 
     homework_students.where("completed_on is not null") 
end 

ビュー:私もこれを試してみました

<% if homework.getCompletion %><%= image_tag "fi-check.svg", class: "homework_student_complete" %><% else %><%= image_tag "fi-x.svg", class: "homework_student_complete" %><% end %> 

class Homework < ActiveRecord::Base 
    has_many :homework_students, :class_name => 'HomeworkStudent' 


class HomeworkStudent < ActiveRecord::Base 
    belongs_to :homework, :class_name => 'Homework' 

は、私は私のために動作しません、以下を試してみました

モデル

def completed? 
    !homework.homework_student.completed_on.blank? 
end 

ビュー

<% if homework.completed? %> 
<%= image_tag "fi-check.svg", class: "homework_student_complete" %><% else %><%= image_tag "fi-x.svg", class: "homework_student_complete" %><% end %> 

どんな指導を感謝しています。

UPDATE

これは動作します:

def completed? 
     homework_students.where("completed_on is not null").length == 0 
    end 

<% @homeworks.each do |homework| %> 
... 
<td height="1" class="text-center"><% if homework.completed? %> 
    <%= image_tag "fi-check.svg", class: "homework_student_complete" %> 
<% else %> 
    <%= image_tag "fi-x.svg", class: "homework_student_complete" %> 
<% end %></td> 
... 
<% end %> 
+1

ではActiveRecord ::関係法上の

# app/models/homework.rb def completed? homework_students.where("completed_on is null").none? end # in the view <% if homework.completed? %> <%= image_tag "fi-check.svg", class: "homework_student_complete" %> <% else %> <%= image_tag "fi-x.svg", class: "homework_student_complete" %> <% end %> 

詳細情報:ような何かをしてみてください。たぶん '<%= homework.completed? %> 'を診断として使用します。 – tadman

答えて

1

クエリの結果は、ActiveRecord :: Relationまたは空の配列になり得、どちらの場合もifステートメントはtrueと評価されます。クエリを変更してみてください:

def completion 
     homework_students.where("completed_on is null").length == 0 
end 
+0

ありがとうございます!これは動作します:) – Co2

-1

あなたの方法のget_completionは何も返していません。試してみてください

@homework_student = homework_students.where("completed_on is not null") 
return @homework_student 

が該当することがあります。また、completed_onがnullでないことを確認してください。

+0

Rubyでは、メソッド内の最後のステートメントが自動的に返されます。あなたは基本的に@ Co2のコードを取って同じことをしましたが、もっと冗長なコードを使っていました。そして、あなたがアイデアが正しい場合であっても、そのようなインスタンスメソッドに値を格納する理由はありません。 –

+0

ya、right。ごめんなさい。さて、上記の答えはすでに少し助けてください。 ..時間は、申し訳ありません。 –

2

あなたgetCompletionメソッドの戻り値の型がActiveRecord::Relationです。あなたは、この関係を条件付きの中に置くことによって、この関係が存在するかどうかを尋ねています。空の配列が真実であるため、関係に空のデータセット(たとえば、[])が含まれていても、常にtrueになります。

HomeworkStudentレコードのコレクションを返すには、getCompletionが必要です。すべての生徒が宿題を完了している場合にのみ目盛りを表示したい場合は「x」を、そうでない場合はすべてのレコードについて何かを確認する集計メソッドが必要です。 `if`条件がtrueと評価された場合image_tag`部分のみ描画する必要のある`ことhttp://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-none-3F

+0

ありがとう! Bmxerのソリューションも利用できました。 – Co2

+2

@ Co2 Benさんが指摘した 'none?'メソッドの使用はもっとエレガントですよね;-) – Bmxer

関連する問題