Ruby on rails 未知属性:具有嵌套视图且具有多个关系的管理员id

Ruby on rails 未知属性:具有嵌套视图且具有多个关系的管理员id,ruby-on-rails,ruby,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3.2,基本上,我的问题是,当尝试在rails应用程序中使用嵌套视图时,我需要存储页面的普通用户和管理员。两者都包含相同的信息,我只需要知道谁是谁。我有一个团队模型: class Team < ActiveRecord::Base attr_accessible :auth_token, :team_name, :template has_many :events, :dependent => :destroy has_many :users has_many :admins

基本上,我的问题是,当尝试在rails应用程序中使用嵌套视图时,我需要存储页面的普通用户和管理员。两者都包含相同的信息,我只需要知道谁是谁。我有一个团队模型:

class Team < ActiveRecord::Base
  attr_accessible :auth_token, :team_name, :template
  has_many :events, :dependent => :destroy
  has_many :users
  has_many :admins, :class_name => "User", :foreign_key => 'admin_id'
  accepts_nested_attributes_for :admins
end
app/controllers/teams\u controller.rb:28:in'new'

TeamController#全新


尝试将
user\u id
作为外键。我认为ActiveRecord不太聪明,无法理解在调用
admin\u id
时要调用
user\u id
,您不能将:foreign\u key选项设置为表中不存在的列。 用户表没有“用户id”或“管理员id”列

在任何情况下,Rails都不会为您创建外键列。您需要在迁移过程中明确定义它们

见@Shweta建议的


不能将:foreign_key选项设置为表中不存在的列。用户表没有“用户id”或“管理员id”列

在任何情况下,Rails都不会为您创建外键列。您需要在迁移过程中明确定义它们

所以,如果用户只能属于一个团队,那么应该在用户表中使用have
team\u id
。如果有,则可以在用户模型中将范围定义为:

scope :admins, where(:player => 'Admin') # I am assuming player is keeping Admin/Member.
并在您的团队模型中替换

has_many :admins, :class_name => "User", :foreign_key => 'admin_id'
accepts_nested_attributes_for :admins

在您的团队中#新行动,替换

@team.admins.build

最后,在您看来,如果您使用字段

<%= f.fields_for :users do |admin| %>
  <%= admin.hidden_field :player, :value => 'Admin' %>
  <% add other user fields %>
<% end %>

'管理员'>

现在您可以通过
@team.users.admins

获得团队的管理员了。您可以显示用户模型和要添加嵌套表单的视图吗?users表是否包含“admin\u id”列?@shweta users表不包含admin\u id列,因为我希望admin\u id只是另一个具有不同名称的用户id。显示错误,请。@shweta我应该注意,如果我使用“用户id”而不是“管理员id”,我会得到相同的错误。谢谢。我把这个关系的数据库概念倒过来了。我可以处理这个问题。
scope :admins, where(:player => 'Admin') # I am assuming player is keeping Admin/Member.
has_many :admins, :class_name => "User", :foreign_key => 'admin_id'
accepts_nested_attributes_for :admins
accepts_nested_attributes_for :users
@team.admins.build
@team.users.build
<%= f.fields_for :users do |admin| %>
  <%= admin.hidden_field :player, :value => 'Admin' %>
  <% add other user fields %>
<% end %>