2015-11-05 90 views
3

我是Ruby on Rails的新手,我創建了一個包含用戶表(由devise生成)和包含用戶特定帳戶設置的AccountSetting表的項目(此表有一個與用戶表中的id相關的外鍵,因此每個用戶有零個或一個AccountSettings)。我的種子數據工作正常,我可以爲擁有用戶特定帳戶設置的用戶創建數據庫。用戶表與AccountSetting表相關,其中包含「has_one:accountsetting」和AccountSettings表「belongs_to:user」。這一切都有用並且合理。但是,我在我的UserSettings控制器中有一個名爲「show_user_setting」的方法,我不知道如何只顯示該特定身份驗證用戶的帳戶設置。用設計在Ruby on Rails中創建用戶帳戶設置頁面

那麼,我怎樣才能顯示當前登錄用戶的用戶設置?再次,我正在使用設計。 我的一般想法是如何做到這一點。不過,我知道這是不正確的,但爲了解釋的目的,這裏是。

def show_user_setting 
    @setting = AccountSetting.find(current_user) 
end 

我的想法是@setting將包含當前登錄用戶的設置。提前致謝!

回答

-1

你試過

def show_user_setting 
    @setting = AccountSetting.find_by(user_id: current_user.id) 
end 

的方式.find()作品是它搜索通過ID模型。所以,你現在擁有的方式是當你想找到外鍵的時候,你會試着去搜索模型的id。所以使用Model.find_by(column_name: param)。你會將user_id:更改爲你存儲外鍵的列名,我只是假設它是類似的東西。

+0

這工作!謝謝!還有一件事。如果我有一個類似的模型,其中用戶表has_many:someothermodel我仍然可以使用相同的.find(user_id:current_user.id)來獲取整個列表?或者這隻會返回一個值到@setting? –

+0

@CannonMoyer如果它是'has_many'關係,您可以像訪問模型上的屬性那樣訪問它。所以,假設你有一個'User'模型。和那個用戶'has_many'狗('狗')。並且您在該用戶的實例的顯示頁面上,並且有一個實例變量@user。在頁面上,你可以使用'@ user.dogs'。更實際:'@ user.dogs.each do | dog |'。同一個控制器。你可以像'@dogs = User.find(params [:id])。dogs'一樣設置狗實例變量。 [更多](http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association)。 – user2826911

-1

我猜show_user_setting功能是控制器的一部分,如果它是一個模型,然後閱讀:accessing devise current_user within model

設置你應該能夠做到這一點

@setting = AccountSetting.find(user_id: current_user.id) 
的@setting變量

@setting = AccountSetting.find(user: current_user) 
2

你應該這樣做:

#app/models/account_setting.rb 
class AccountSetting < ActiveRecord::Base 
    belongs_to :user 
end 

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_one :account_setting 
end 

這將允許您調用下面:

@setting = current_user.account_setting 

我們設置

對於它的價值,我們做同樣的事情:

#app/models/user.rb 
class User < ActiveRecord::Base 
    before_create :build_profile #-> builds a blank profile on user create 
    has_one :profile 
end 

#app/models/profile.rb 
class Profile < ActiveRecord::Base 
    belongs_to :user 
end 

這使得我們把profile模型中的各種不同的選項我們有homepage等):

enter image description here

這裏要注意的重要一點是,上面讓你delegate各種方法的profile模型,允許您調用下面:

current_user.profile_name 
current_user.profile_signin_redirect? 
current_user.profile_avatar 

etc

相關問題