ruby-on-rails – Rails belongs_to has_many与自定义外键

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails belongs_to has_many与自定义外键前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的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

猜你在找的Ruby相关文章