我的 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
该Player
模型的字段alias
是我的应用程序中的用户名。我希望用户名充当主键,因为它是唯一的,并且更容易迁移数据和维护关系。
最初我只有 PlayerSession 模型已经填充了数据,但是随着我的应用程序的增长,我添加了 Player 模型并简单地插入了一行具有相同的alias
.
在Player
'sshow
视图中,我有以下代码:
Player Sessions:
<% @player.player_sessions do |player_session| %>
<ul>
<li><h4>Highest Score:</h4> <%= player_session.total_score %> </li>
</ul>
当我尝试访问该页面时,它不会显示信息。
我可以添加的其他信息是我没有在数据库本身中添加任何关系。
我对 Rails 还是很陌生,仍然在玩它。欢迎任何有关编码标准的意见(除了回答问题)。
更新我通过primary_key
在模型中添加选项来实施 Babur Usenakunov 的建议:
class Player < ActiveRecord::Base
set_primary_key "alias"
attr_accessible :alias, :avatar
has_many :player_sessions, :primary_key => "alias", :foreign_key => "player_alias", :class_name => "PlayerSession"
end
class PlayerSession < ActiveRecord::Base
attr_accessible :player_alias, :total_score
belongs_to :player, :primary_key => "alias", :foreign_key => "player_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 %>