2011-12-05 162 views
1

我有3個控制器:站點,用戶&會話。我擁有所有的身份驗證設置,並且我在用戶登錄後將對象current_user設置在了應用程序控制器中。現在,我想要做的只是允許用戶查看他們的站點(站點模型具有:「belongs_to:user 「)。獲取當前用戶的記錄

class SitesController < ApplicationController 

def index 
    #this was Site.all, but I changed it. Is there a better way to do this? 
    @sites = Site.find_all_by_user_id(current_user.id) 
    # respond to ... etc 
end 

# Now, for show, edit and update, I want to ensure the site belongs to the user. How can I add that? 
def show 
    @site = Site.find(params[:id]) 
    # respond to ... etc 
end 

如果需要更多信息(模型,整個控制器等),請讓我知道,我會告訴你!

謝謝!

+0

看起來不錯!我會做一個Site.where,但我沒有看到你的方法有什麼問題。對於顯示/編輯等,你正在查找ID,也爲用戶ID添加一個where子句。 – aishwarya

+0

那麼,我的主要問題是如何讓用戶編輯他們的網站。我想補充: 高清編輯 @site = current_user.sites.find(PARAMS [:編號]) 結束 但我得到的:mysql ::錯誤: '以條款' 未知列 'published_at':SELECT 'si等 – execv

+0

更改爲Site.where(:id => params [:id],:user_id => current_user)? – aishwarya

回答

1

我無法很清楚地追上你的想法。但似乎你想要的是類似如下:

def show 
    @site = Site.find(params[:id]) 

    # check if the site belong to current user 
    redirect_to some_user_default_path if @sites.user != @current_user 

    # respond to ... etc 
end 

希望它可以幫助。

2

假設,你的模型有一個像這樣定義的關聯:

class Site < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :sites 
end 

,那麼你應該能夠做做一個簡單:

current_user.sites 

獲得與該用戶相關的所有網站