2016-08-01 4 views
0

私は、私のレールアプリの登録に関するいくつかの面を試してみる初心者です。ユーザーには多数の登録があります。登録はレッスンに属します。登録には多くのword_expositionsとscrambled_wordsがあります。選択したユーザーのリストを作成するためのヘルパーメソッド

私は各レッスンショーのページで表示するには、登録ユーザのリストを生成するためにレッスンコントローラでヘルパーメソッドを書いた:

helper_method :enrolled_users 
    def enrolled_users 
    lesson = Lesson.find(params[:id]) 
    enrollments = lesson.enrollments 
    enrolled_users = enrollments.map { |enrollment| enrollment.user } 
    end 

私は今、私が示すことができるようにcompleted_exposヘルパーを実装しようとしています各ユーザーの横に、自分のアプリのプレゼンテーションコンポーネントが完成したかどうかを確認します。私が持っているものは:

helper_method :completed_expos 
    def completed_expos 
    lesson = Lesson.find(params[:id]) 
    completed_expos = enrolled_users.map do |user| 
     current_enrollment = lesson.enrollment_for(user) 
     all_expos = current_enrollment.word_expositions 
     all_expos.all? { |expos| expos.completed == true } 
    end 
    end 

私は、リストされた各ユーザーの横に、公開を完了したかどうかに関する通知を追加したいと思います。

<% enrolled_users.each do |user| %> 
    <ul> 
    <li><%= user.username %></li> 

    <% if completed_expos.include?(user) %> 
     completed 
    <% end %> 
    </ul> 
<% end %> 

その効果は登録ユーザがリストされているが、それはそれをリストする必要があり、これらの場所での博覧会の完了までなどが示されていない、ということです。だから、私が試したことはあります。このユーザーのサブグループを選択するにはどうすればよいですか?

答えて

1

私はあなたのコードから取得することができますが、あなたの「completed_expos」メソッドは常に返すことであるから、ユーザーのリストではなくブール値の配列(true、false)を指定するので、指定したユーザーは決して含まれません。

マップの代わりに選択を使用することをお勧めします。

enrolled_users.select do |user| 
    current_enrollment = lesson.enrollment_for(user) 
    all_expos = current_enrollment.word_expositions 
    all_expos.all? { |expos| expos.completed == true } 
end 

また、私はあなたがメソッドと同じ名前の変数にあなたの方法のそれぞれの値を割り当てる必要はありませんと言ってみましょう。例えば。

def enrolled_users 
    lesson = Lesson.find(params[:id]) 
    enrollments = lesson.enrollments 
    enrolled_users = enrollments.map { |enrollment| enrollment.user } 
end 

だろ

def enrolled_users 
    lesson = Lesson.find(params[:id]) 
    enrollments = lesson.enrollments 
    enrollments.map { |enrollment| enrollment.user } 
end 
0

問題が配列にマップするようヘルパーは、ユーザーを返していなかったです。

helper_method :completed_expos 
def completed_expos 
    lesson = Lesson.find(params[:id]) 
    completed_expos = enrolled_users.map do |user| 
    current_enrollment = lesson.enrollment_for(user) 
    all_expos = current_enrollment.word_expositions 
    user if all_expos.all? { |expos| expos.completed == true } 
    end 
end 
関連する問題