使用设计在Ruby on Rails中创建用户帐户设置页面

时间:2015-11-05 00:14:18

标签: ruby-on-rails ruby devise

我是Ruby on Rails的新手,我创建了一个包含User表(由devise生成)的项目和一个包含用户特定帐户设置的AccountSetting表(该表有一个与用户表因此每个用户有零个或一个AccountSettings)。我的种子数据工作正常,我可以为具有用户特定帐户设置的用户播种数据库。 User表与AccountSetting表相关,其中包含" has_one:accountsetting"和AccountSettings表" belongs_to:user"。这一切都有效并且有意义。但是,我有一个名为" show_user_setting"在我的UserSettings控制器中,我不知道如何仅显示该特定经过身份验证的用户的帐户设置。

那么,我怎样才能显示当前登录用户的用户设置?再次,我正在使用设计。 我对如何做到这一点的一般想法是这样的。但是我知道这是不正确的,但为了解释,这里是。

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

我的想法是@setting将包含当前登录用户的设置。提前致谢!

3 个答案:

答案 0 :(得分: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

这里需要注意的重要一点是,上面允许您profile模型delegate的各种方法,允许您调用以下内容:

current_user.profile_name
current_user.profile_signin_redirect?
current_user.profile_avatar

答案 1 :(得分:-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:更改为您存储外键的列名称,我只是假设它与此类似。

答案 2 :(得分:-1)

我猜测show_user_setting函数是控制器的一部分,如果它在模型上,那么请阅读:accessing devise current_user within model

设置@setting变量,你应该能够做到这一点

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

@setting = AccountSetting.find(user: current_user)