2015-01-13 58 views
0

我正在開發我的第一個Ruby on Rails CRUD類型應用程序之一。從Rails應用中的所有用戶索引中扣留當前用戶

這是一個像用戶帳戶(設計)和用戶上傳和擁有的圖片的Instagram應用程序。

我想創建一個用戶索引,一個發現其他用戶功能。我已經這樣做了,但輸出包括當前登錄的用戶。我希望從「發現其他用戶」下的用戶索引中省略當前用戶。

用戶控制器代碼與我嘗試過的代碼失敗註釋掉。

class UsersController < ApplicationController 
 

 
\t def show 
 
\t \t @user = User.find(params[:id]) 
 
\t end 
 

 
\t def new 
 
\t end 
 

 
\t def index 
 
\t \t @users = User.all 
 
\t \t #@users = User.where("user_id != ?", current_user.id) 
 
\t end 
 
end

用戶查看代碼

<div class="booyah-box col-xs-6 col-xs-offset-3"> 
 
\t <% @users.each do |user| %> 
 
\t <%= link_to public_profile_path(user) do %> 
 
\t <%= image_tag user.avatar, :class => "smallPlate" %> 
 
\t <% end %> 
 
\t <% end %> 
 
</div>

和錯誤

ActiveRecord::StatementInvalid in Users#index 
 
Showing /vagrant/src/platewarz/app/views/users/index.html.erb where line #2 raised: 
 

 
PG::UndefinedColumn: ERROR: column "user_id" does not exist 
 
LINE 1: SELECT "users".* FROM "users" WHERE (user_id != 9) 
 
              ^
 
: SELECT "users".* FROM "users" WHERE (user_id != 9) 
 
Extracted source (around line #2): 
 
1 
 
2 
 
3 
 
4 
 
5 
 
      
 
    <div class="booyah-box col-xs-6 col-xs-offset-3"> 
 
    \t <% @users.each do |user| %> 
 
    \t <%= link_to public_profile_path(user) do %> 
 
    \t <%= image_tag user.avatar, :class => "smallPlate" %> 
 
    \t <% end %> 
 

 
Rails.root: /vagrant/src/platewarz 
 

 
Application Trace | Framework Trace | Full Trace 
 
app/views/users/index.html.erb:2:in `_app_views_users_index_html_erb___484529272__626771048'

回答

1

如果您使用Rails 4:

@users = User.where.not(id: current_user.id) 

其他

@users = User.where('id != ?', current_user.id) 

事關話題:

Better create a scope in your 
    #user.rb: 
    scope :all_except_current, ->(user) { where.not(id: user) } 

#now use this scope in your controller & get all your users except current_uesr 
def index 
    @users = User.all_except_current(current_user) 
end 
+0

這個答案是正確的,我只是建議你檢查current_user是否存在。我沒有看到before_filter或任何可以保證current_user存在的東西。 – vereecjw

+0

我想,如果我們按範圍定義它(檢查我的模型代碼),我們甚至不需要驗證current_user的存在。即使它是零,這個範圍將返回所有的用戶。 – Ajay

+0

是的!那樣做了。所以我想這與版本有關? (我正在使用Rails 4.2.0)。我有點遺憾,因爲在相同的應用程序(發現照片)中使用了相似的場景:@Pics = Pic.where('id!=?',current_user.id),但是我的用戶場景沒有。但是,這兩種情況都適用於所建議的.where.not .....感謝您的幫助! –

相關問題