我是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将包含当前登录用户的设置。提前致谢!
答案 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
等):
这里需要注意的重要一点是,上面允许您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)