我在我的Rails應用程序中有2個模型之間的關係。我已經遠離了如何實現關係的標準,因爲我使用另一個字段作爲主鍵,命名約定不同。這樣做導致了這種關係看似不成立。我想了解爲什麼。Rails belongs_to has_many與自定義外鍵
這是我的模型的下調版本:
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
的show
觀點我有以下代碼:
Player Sessions:
<% @player.player_sessions do |player_session| %>
<ul>
<li><h4>Highest Score:</h4> <%= player_session.total_score %> </li>
</ul>
當我嘗試訪問的頁面簡單不顯示信息。
我可以添加的其他信息是我沒有在數據庫本身中添加任何關係。
我還是個新手,還在玩弄它。任何關於編碼標準(回答問題之外)的意見都是值得歡迎的。
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列表:
更新我已經通過增加模型中的primary_key
選項實現巴布爾Usenakunov的建議
控制器中執行的代碼:
@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 %>
我不確定,但也許你應該在選項中傳遞主鍵。例如。 'has_many:player_sessions,:primary_key =>'alias',:foreign_key =>'player_alias':class_name =>'PlayerSession''和'belongs_to:player,:primary_key =>'alias',:foreign_key =>「player_alias」, :class_name =>「Player」 –
嘗試過這種方式,但仍然不起作用 – Drahcir
@Drahcir,我傾向於認爲Babur Usenakunov的建議應該起作用。在嘗試了他們的建議後,@ player.player_sessions'會返回什麼? – Sun