- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有三个模型,一个用户,一个个人资料和一个角色,我试图通过个人资料 角色附加到用户强>.
# user.rb
class User < ActiveRecord::Base
has_one :profile, dependent: :destroy
has_many :roles, through: :profile
has_many :interests, through: :profile
has_many :industries, through: :profile
end
# profile.rb
class Profile < ActiveRecord::Base
has_one :user, dependent: :destroy
has_many :roles
has_many :interests
has_many :industries
end
# role.rb
class Role < ActiveRecord::Base
has_many :profiles
has_many :users, :through => :profiles
has_many :users
end
我正在尝试在 edit.html.erb (simple_form_for)
中使用以下内容<%= f.association :roles,
as: :check_boxes,
label_method: :name,
value_method: :id,
label: 'Roles' %>
使用以下参数
params.require(:user).permit([:email, :first_name, :last_name, :admin, :password, role_ids: [] ])
我的编辑/更新方法:
# GET /users/1/edit
def edit
@user.build_profile if @user.profile.nil?
end
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
给我以下错误信息
Cannot modify association 'User#roles' because the source reflection class 'Role' is associated to 'Profile' via :has_many.
我已经研究了这个问题几个小时了,但我似乎找不到错误。
最佳答案
您定义关系的方式存在几个问题。
has_one
将外键放在关系的反面。因此,如果您在两端都声明了与 has_one
的关系,ActiveRecord 将无法加载该关联。相反,您需要在带有外键的一侧使用 belongs_to
:
# user.rb
class User < ActiveRecord::Base
has_one :profile, dependent: :destroy
end
# profile.rb
class Profile < ActiveRecord::Base
belongs_to :user, dependent: :destroy
end
当涉及到用户和角色时,您在两边都声明了 has_many,但没有告诉 ActiveRecord 在哪里存储关系。在双向多对多关系中,您需要使用 has_many through:
和连接模型或 has_and_belongs_to_many
。
通常在构建基于角色的访问系统时,您希望定义关系,以便角色 belongs_to
单个用户而不是具有单个 Admin
角色,例如许多用户。这允许您将角色限定在资源范围内,并使添加/删除角色的逻辑变得更加简单(您是在用户中添加(或删除)角色,而不是在角色中添加或删除用户。)
如果您正在验证/授权您不想使用 has_many :roles, through: :profiles
的 User 模型 - 三方连接会慢得多并增加不必要的复杂性和间接。
如果您真的需要一个“配置文件”表,那么将它用于有关用户的辅助信息,并在需要时加入它。
class User < ActiveRecord::Base
has_many :roles,
has_one :profile, dependent: :destroy
end
# Columns:
# - user_id [integer, index, foreign key]
# - resource_id [integer, index]
# - resource_type [string, index]
class Role < ActiveRecord::Base
belongs_to :user, dependent: :destroy
belongs_to :resource, polymorphic: true,
dependent: :destroy
end
# Columns:
# - user_id [integer, index, foreign key]
class Profile < ActiveRecord::Base
belongs_to :user
# this is option but can be useful
has_many :roles, through: :user
end
我真的建议您先阅读官方 rails guides article on associations .
关于ruby-on-rails - 无法修改关联 'User#roles',因为源反射类 'Role' 通过 :has_many 关联到 'Profile',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35534490/
我有一个具有以下模型的应用程序:- 类别- 子类别- 产品- 产品子类别 我的关系如下: Category has_many :subcategories Subcategory belongs_to
看来 rails 仍然不支持这种类型的关系并抛出 ActiveRecord::HasManyThroughAssociationPolymorphicThroughError 错误。 我该怎么做才能实
我想知道我可以在多大程度上使用 Rails 中的关联。考虑以下因素: class User :provider end class Provider :businesses belongs
我是 Rails 的新手。我想知道我是否需要将 add_index 添加到两个迁移? 我正在尝试定义用户和事件。每个用户可以有多个事件,每个事件可以有多个用户。所以我会做这样的事情: class Us
我有这个: class User :series end class Serial :serials end class Episode < ActiveRecord::Base belong
我一直致力于一个大量使用模型关联的项目,似乎我发现了 has_many 或 has_one through 功能与 :conditions 功能冲突的情况。简而言之,问题是 through 关联为 h
模拟以下情况的最佳方法是什么: Word belongs_to :wordable, :polymorphic => true Phrase has_many :words, :as => :
这似乎是一个典型的问题,但很难搜索。 我想选择用户通过 has_many 拥有的项目和用户通过 has_many through 关联的项目。 考虑以下模型: class User < ActiveR
首先对英语感到抱歉 所以我已经有了“用户 - 帖子”一对多关联,这意味着每个帖子只能有一个作者,现在我想在用户个人资料中添加“最喜欢的帖子”按钮,以及“添加到收藏夹”按钮每个帖子,所以问题是如何实现这
我有一个用户模型,允许用户关注其他用户。每个用户也有很多东西: class User has_many :following, :class_name => 'Followings', :fore
我正在使用 Rails 4.1 和 Ruby 2.1。 一个用户 has_many 辆车,和一辆车 has_many 约会。获取所有用户约会的最简单方法是什么? 理想情况下,我想做这样的事情:user
我想为 has_many/has_many 关系定义一个工厂(我想我做对了)但是我不知道如何为这些创建的工厂的每个对象定义属性。 这是主页,这是交易卡片的列表 我们假设下面的主页 View 是针对登录
我正在努力弄清楚如何实现这个计数。模型是用户、测试、等级 用户 has_many 测试,测试 has_many 成绩。 每个等级都有一个计算分数(strong_pass、pass、fail、stron
我有一个 has many through 关系来定义用户已回答的问题。 如何为用户创建的问题建立关系? 通常你会在用户和问题之间创建一个 has_many 和 belongs_to 关系,但是因为我
例如,在 class Student < ActiveRecord::Base has_many :awards end class Awards < ActiveRecord::Base b
我仍然在尝试如何处理在Ecto中创建/更新has_many, through:关联。我已经重新阅读了José's关于关联以及the docs的帖子,但我仍在努力。 我所拥有的是: 网站/模型/dish
# == Schema Information # # Table name: orders # # id :integer not null, pri
我正在尝试从 EventView.promoter_id = User.id 的用户获取事件,但它无法正常工作。这是我的设置(目前不正确): User has_many :events has_man
我有三门课 TeamMember , Service和ServiceTeamMember 我有 class Service has_many :service_team_members has
我需要列出所有用户及其销售的产品总量及其电子邮件和产品总量, class User :user).group('users.email').sum(:quantity) 关于mysql - 事件记录
我是一名优秀的程序员,十分优秀!