Ruby on rails RubyonRails设计了用户的返回角色
我使用我为Desive gem找到的一种非常简单的方法为用户提供了一些角色: 但是现在在用户配置文件页面上,我不知道如何显示用户分配的角色,更不用说能够更改它了。我一直在尝试实际视图中的Ruby on rails RubyonRails设计了用户的返回角色,ruby-on-rails,devise,Ruby On Rails,Devise,我使用我为Desive gem找到的一种非常简单的方法为用户提供了一些角色: 但是现在在用户配置文件页面上,我不知道如何显示用户分配的角色,更不用说能够更改它了。我一直在尝试实际视图中的变体,但没有任何东西可以显示用户的角色类型。以下是其设置方式: user.rb class User < ActiveRecord::Base ... belongs_to :role before_create :set_default_role private def set_d
变体,但没有任何东西可以显示用户的角色类型。以下是其设置方式:
user.rb
class User < ActiveRecord::Base
...
belongs_to :role
before_create :set_default_role
private
def set_default_role
self.role ||= Role.find_by_name('contractor')
end
end
更新:
经过更多的胡闹,我发现
<%= Role.where(current_user.id).name %>
<%= Role.where('role_id = ?', current_user.id).name %>
两者都返回相同的东西“角色”,但它不应该返回类似“承包商”的东西吗?
另外,下面是create_roles.rb的迁移:
class CreateRoles < ActiveRecord::Migration
def change
create_table :roles do |t|
t.string :name
t.timestamps
end
end
end
class CreateRoles
更新2:
我意识到,正如教程所说,我已将角色id添加到用户记录中。迁移:
class AddRoleIdToUser < ActiveRecord::Migration
def change
add_column :users, :role_id, :integer
end
end
类AddRoleIdToUser<%= User.where("role_id = 'contractor'").name %>
这返回“用户”是多么奇怪!一般来说,我对这种语言和web开发是全新的,但我只希望它返回我的“承包商”或“雇主”角色类型。我做错了什么?使用这种方法你可能会做得很好
其他模型数据 问题是,您正试图将另一个模型的数据对象加载到当前模型中。这必须是这样的:
@user.role.name # -> "role" is another object, not a naked piece of data
解决方法是添加以下内容:
class User < ActiveRecord::Base
...
belongs_to :role
delegate :name, to: :role, prefix: true #-> yields @user.role_name
before_create :set_default_role
private
def set_default_role
self.role ||= Role.find_by_name('contractor')
end
end
class用户产生@user.role\u姓名
创建前:设置默认角色
私有的
def set_默认_角色
self.role | |=role.find_by_name(“承包商”)
终止
终止
关系数据 如果您是从Rails开始的(顺便说一句,欢迎),那么您应该了解Rails是如何工作的 本质上,您可以使用
id
(称为a)来执行所有操作。这允许不同的模型通过调用各自的ID从相关模型调用数据。这就是为什么您必须将role\u id
添加到您的用户模型中
我认为学习如何使用从关系模型中调用的数据对象会使您受益匪浅。例如,
@user.role\u id
必须是角色的对应id
db谢谢,我在委托中添加了,但在@user.role.name中添加了,但仍然不起作用,它说:“仪表板中的NoMethodError#索引…未定义的方法‘role’表示nil:NilClass”它似乎在我的控制器中寻找def角色
,这对我来说很奇怪。我还尝试了“current_user.role.name”,但出现了不同的错误。我阅读了关系数据——我想我理解了语法对我来说很难理解的概念。也许是Desive gem把我甩了。Desive只是为登录的用户创建了一个会话——保存的数据还是一样的。在您的user
表中,是否填充了role\u id
列?如果是,该列的值是否与角色数据库中的列相对应?关于nil:NilClass
错误,您如何创建@user
var?如果您的关联设置正确,那么您根本不必直接引用角色
模型-您可以这样做:@user=user.find(5)@user.Role.name
返回角色名:)抱歉,花了一分钟时间,我不得不下载一个.sqlite3查看器。所以我检查了一下,我的users表有role_id,但它没有填充!我认为这是因为我有set_default_角色代码,我不明白为什么不给我的用户分配角色。此外,角色表是完全空白的。我不知道该怎么办,我将删除数据库,重新启动服务器并再次注册以查看发生了什么,所以我这样做了,但它没有在我刚刚创建的新登录上填写我的角色id。所以我不知道为什么,因为所有相关的代码都在那里。此外,我不知道我是如何创建@user var的,或者我是如何创建的-我认为Desive为我做了所有这些,到目前为止,我只为用户发送了电子邮件和我刚刚写的东西,而且效果很好。最终的解决方案是什么?你能在这里写信吗。。我也有同样的问题。请做必要的事
@user.role.name # -> "role" is another object, not a naked piece of data
class User < ActiveRecord::Base
...
belongs_to :role
delegate :name, to: :role, prefix: true #-> yields @user.role_name
before_create :set_default_role
private
def set_default_role
self.role ||= Role.find_by_name('contractor')
end
end