over 2 years ago
  1. 要不要讓沒有註冊的網友看到user index? 現在的設定是:
    Controller/Users_Controller:沒有註冊的人,會直接跑到註冊頁面。
    if user_signed_in?
        render :index
    else
        redirect_to new_user_registration_path
    end
    
    如果是這樣設定,user index就不用這樣設了:
    Users/index.html.erb :如果有登入,顯示配對率,如果沒有登入,不用顯示。
    <% if current_user %>
        看到配對率
    <% else %>
        只有大頭照
    <% end %>
    </div>
    <%= will_paginate @paginate, :page_links => false if @paginate %>
    </div>
    
  2. 這是user_helper.rb的設定
    user_helper.rb
    module UsersHelper
        #由view那邊傳來current_user和user兩個變數。
    
        def match_percentage(current_user, user)
            #計算非登入用戶的option數量
    
        other_user_option = user.option
            number_other_user_option =  other_user_option.length.to_f
            #計算登入用戶的option數量
    
        current_user_option = current_user.option
            number_current_user_option =  current_user_option.length.to_f
        #計算非登入用戶與登入用戶,相同option的數量。
    
            number_same_option = (other_user_option&current_user_option).length.to_f
            #比重計算
    
        var_match_current = (number_same_option)/(number_current_user_option)
            var_match_other   = (number_same_option)/(number_other_user_option)
            #配對率計算式
    
        @match = number_to_percentage(Math.sqrt(var_match_current  var_match_other)100, precision: 0)
            #回傳配對率
    
        @match
        end
    end
    
  3. 這邊會有兩個問題,如果非登入用戶沒回答過問題,或者是,如果登入用戶也沒回答過問題
  4. ## 最簡單的解決方法,逼迫所有人在登入的時候一定要回答三個問題。
  5. 這是user index裡面的設定,應該是已經把如果非登入用戶沒回答過問題的問題排除掉了(<% if user.respond.any? %>),但是如果登入用戶也沒回答過問題就還沒有排除掉,所以應該要加<% if current_user.respond.any? %>
    Users/index.html.erb
    <% if current_user %>
    <ul class='items clearfix'>
      <% @user.each do |user| %>
        <li>
          <span class='index_content'>
            <span class='index_thumb'>
              <%= image_tag(user.avatar.url(:thumb)) %>
            </span>
            <span class='index_user'>
              <span class='index_lastrespond'>
                <% if user.respond.any? %>
                  <%= user.respond.last.option.issue.content %>
                <% else %>
                  <p><%= "還沒回答過問題" %></p>
                <% end %>
              </span>
    </span> </span> <span class=
    'footer_match'> <span> <strong><%= link_to user.name, user_path(user), class:'index_name'%></strong> </span> <span class='match_percentage'> <% unless user.respond.any? %> <span class='heart'><span class='glyphicon glyphicon-heart'></span> <strong><%= match_percentage(current_user, user) %></strong></span> <% else %> <span class='heart'><span class='glyphicon glyphicon-heart'></span> <strong>0%</strong></span> <% end %> </span> </span> </li>
    <% end %> </u
    l> <% else %> <ul class='items'> <% @user.each do |user| %> <li> <%= image_tag(user.avatar.url(:icon)) %> <span class='name'> <%= user.name %></span> </li>
    <% end %> </ul> <% end %> </div> <%=
    will_paginate @paginate, :page_links => false if @paginate %> </div>


    1. 除了最簡單的方法外,我能夠想到的方法是:
      Controller/Users_Controller:
      if user_signed_in? 
            if current_user.option.any?
              render :index
            else
              redirect_to unresponded_issue_responds_path
            end
            else
              redirect_to new_user_registration_path
          end
      
      如果登入,如果有回答過問題,就到首頁去看配對。如果沒有回答過問題,就到新問題去。 如果沒有登入,就到註冊頁。
← 如何設計User Profile Page,去完成基本題 has_many :through →