我的rails应用程序中有两个模型之间的关系.我已经偏离了如何实现关系的标准,因为我使用另一个字段作为主键,命名约定是不同的.这样做导致了关系似乎没有建立起来.我想了解为什么.
这是我的模型的修剪版本:
class Player < ActiveRecord::Base set_primary_key "alias" attr_accessible :alias,:avatar has_many :player_sessions,:foreign_key => "player_alias",:class_name => "PlayerSession" end class PlayerSession < ActiveRecord::Base attr_accessible :player_alias,:total_score belongs_to :player,:foreign_key => "player_alias",:class_name => "Player" end
播放器模型具有字段别名,这是我的应用程序中的用户名.我希望用户名作为主键,因为它是唯一的,它将更容易迁移数据并维护关系.
最初我只有已经填写了数据的PlayerSession模型,但是随着我的应用程序的增长,我添加了Player模型,并简单地插入了一个具有相同别名的行.
Player Sessions: <% @player.player_sessions do |player_session| %> <ul> <li><h4>Highest score:</h4> <%= player_session.total_score %> </li> </ul>
我仍然是新的轨道,仍然在玩.欢迎任何关于编码标准的意见(不在回答问题之外).
更新我已经实现了Babur Usenakunov的建议,在模型中添加了primary_key选项:
class Player < ActiveRecord::Base set_primary_key "alias" attr_accessible :alias,:primary_key => "alias",:class_name => "Player" end
还要测试出数据是否有效我手动获取了PlayerSession列表:
控制器中实施的代码:
@player_sessions = PlayerSession.where("player_alias = ?",params[:id])
<% @player_sessions.each do |player_session| %> <ul> <li><h4>Highest score:</h4> <%= player_session.total_score %> </li> </ul> <% end %>
解决方法
我已经解决了这个问题,在这个视图中实现的循环中加入了每一个问题:
<% @player.player_sessions.each do |player_session| %> <ul> <li><h4>Highest score:</h4> <%= player_session.total_score %> </li> </ul> <% end %>
玩了一下之后,我意识到我不需要在任何一个视图中添加primary_key选项,而只在Player模型中留下外键选项.
class Player < ActiveRecord::Base set_primary_key "alias" attr_accessible :alias,:class_name => "Player" end