2014-09-10 43 views
0

我是新來的鐵軌 - 任何幫助將不勝感激。 我想知道我是如何實現的軌道內置功能「.uniq」 -通過迭代防止重複 - 內置函數.uniq [rails4]

  1. 我想顯示在我的index.html.erb頁面只有活動主辦方 - 那就是,我想簡單地只顯示用戶誰創建了事件

  2. 用戶A創建了2個事件,用戶B已經創造14周的活動,用戶C已經創造0個事件

  3. 當我通過@events迭代並調用event.user.full_name - 用戶A的名字出現2次,用戶B的名字出現14次,用戶C的名字不出現

問:我如何獲得用戶A的名字&用戶B的名字只 一次(使用導軌內置方法「.uniq」)雖然雙方用戶創建一個以上的事件出現。我打開除了rails功能以外的任何其他建議。 - 非常感謝

我已經把我下面的所有的編碼都:

瀏覽次數:應用程序/視圖/用戶/ index.html.erb

<% @event.each do |event| %> 
    <%= event.user.full_name %> 
<% end %> 

型號:user.rb & event.rb

class User < ActiveRecord::Base 
    has_many :events, dependent: :destroy 
end 

class Event < ActiveRecord::Base 
    belongs_to :user 
end 

控制器:user_controller.rb

class UsersController < ApplicationController 
    before_action :set_user, only: [:show] 
    before_filter :authenticate_user! 

    # GET /users 
    # GET /users.json 
    def index 
    @users = User.all 
    @event = Event.all 
    end 

    # GET /users/1 
    # GET /users/1.json 
    def show 
    @user = User.find(params[:id]) 
    @events = @user.events.order(:date) 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
     params.require(:user).permit(:email, :password, :password_confirmation, :firstname, :lastname, :dob, :gender, :description, :role) 
    end 
end 

回答

1

在:

def index 
    @users = User.all 
    @event = Event.all 
end 

更改@event = Event.all到:

@event = Event.all.to_a.uniq { |e| e.user.full_name } 

這回答你r具體問題,但是您仍在加載所有事件以及所有關聯用戶到這些事件,僅顯示名稱列表。

我會嘗試這樣的事:

def index 
    @users = User.all 
    @users_with_events = User.joins(:events).uniq 
end 

@users_with_events應減少到一組與事件關係的用戶。

+0

非常感謝你尼克威斯! – ARTLoe 2014-09-10 21:40:15

1

兩種方式。你可以組根據用戶的@event陣列

<% @event.group_by(&:user).each do |user, events| %> 
    <%= user.full_name %> 
<% end %> 

或者,使用@user陣列

<% @user.each do |user| %> 
    <%if user.events.count > 0%> 
     <%= user.full_name %> 
    <%end%> 
<% end %> 
+0

非常感謝你的Vimsha! – ARTLoe 2014-09-10 21:39:56