首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌套命名空间中使用has_many

在嵌套命名空间中使用has_many
EN

Stack Overflow用户
提问于 2014-02-12 21:42:30
回答 1查看 311关注 0票数 1

我有一个类似这样的嵌套模型:

代码语言:javascript
复制
class Games::Player < ActiveRecord::Base
  attr_accessible :user_id
  belongs_to :user
  has_many :games_extras_achievements_players, :class_name => 'Games::Extras::AchievementsPlayer'
  has_many :games_extras_achievements, :class_name => 'Games::Extras::Achievement',:through=>:games_extras_achievements_players
  validates :user_id,uniqueness: true
end

class Games::Extras::Achievement < ActiveRecord::Base
  has_many :games_extras_achievements_players, :class_name => 'Games::Extras::AchievementsPlayer'
  has_many :games_players, through: :games_extras_achievements_players, class_name: 'Games::Player'
end

class Games::Extras::AchievementsPlayer < ActiveRecord::Base
  attr_accessible :games_extras_achievement_id, :games_player_id
  belongs_to :games_extras_achievement, :class_name => 'Games::Extras::Achievement'
  belongs_to :games_player, :class_name => 'Games::Player'
end

对象在联接类上按预期工作。

然而,试图获得玩家的->成绩或相反,都会产生一个错误:

代码语言:javascript
复制
> p.games_extras_achievements
  Games::Extras::Achievement Load (0.3ms)  SELECT "games_extras_achievements".* FROM "games_extras_achievements" INNER JOIN "games_extras_achievements_players" ON "games_extras_achievements"."id" = "games_extras_achievements_players"."games_extras_achievement_id" WHERE "games_extras_achievements_players"."player_id" = 1
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column games_extras_achievements_players.player_id does not exist
LINE 1: ...ents_players"."games_extras_achievement_id" WHERE "games_ext...

如果我将迁移更改为使用player_id,就像它试图查找的那样,我会得到一个错误,说明games_player_id does not exist

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-12 23:13:37

我好像修好了。

我需要使用非名称空间的列名并添加外键约束。

代码语言:javascript
复制
class Games::Player < ActiveRecord::Base
  attr_accessible :user_id
  belongs_to :user
  has_many :games_extras_achievements_players, :class_name => 'Games::Extras::AchievementsPlayer'
  has_many :games_extras_achievements, :class_name => 'Games::Extras::Achievement',:through=>:games_extras_achievements_players
  validates :user_id,uniqueness: true
end

class Games::Extras::Achievement < ActiveRecord::Base
  has_many :games_extras_achievements_players, :class_name => 'Games::Extras::AchievementsPlayer'
  has_many :games_players, through: :games_extras_achievements_players, class_name: 'Games::Player'
end

class Games::Extras::AchievementsPlayer < ActiveRecord::Base
  attr_accessible :achievement_id, :player_id
  belongs_to :games_extras_achievement, class_name:'Games::Extras::Achievement',foreign_key: :achievement_id
  belongs_to :games_player, class_name: 'Games::Player',foreign_key: :player_id
end

希望这能让人省去一些烦恼。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21740336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档