2013-08-27 106 views
0

我很難讓:association幫手工作。基本上我想要一個包含所有32支隊伍的選擇框,而不是無用的:team_id數字,我想使用ActiveRecord魔術來顯示相應團隊的'abbr'或'city'。我正在使用MySQL DB btw。Rails simple_form關聯問題

模式

class Player < ActiveRecord::Base 
    belongs_to :teams 
end 

class Team < ActiveRecord::Base 
    has_many :players 
end 

控制器

@player = Player.find(params[:id]) 

查看

<%= simple_form_for @player do |f| %> 
    <%= f.input :first %> 
    <%= f.input :last %> 
    <%= f.association :teams %> 
    <%= f.button :submit %> 
<% end %> 

================ ==

只是爲了幫助可視化數據,這裏是數據出現在數據庫中的一個抽樣。

數據庫 - 團隊

+----+-----------+-----------+---------------------+---------------------+------+ 
| id | city | name |  created_at  |  updated_at  | abbr | 
+----+-----------+-----------+---------------------+---------------------+------+ 
| 1 | Arizona | Cardinals | 2013-08-27 17:23:55 | 2013-08-27 17:23:55 | ARI | 
| 2 | Atlanta | Falcons | 2013-08-27 17:23:55 | 2013-08-27 17:23:55 | ATL | 
| 3 | Baltimore | Ravens | 2013-08-27 17:23:55 | 2013-08-27 17:23:55 | BAL | 
| 4 | Buffalo | Bills  | 2013-08-27 17:23:55 | 2013-08-27 17:23:55 | BUF | 
+----+-----------+-----------+---------------------+---------------------+------+ 

數據庫 - 玩家

+----+---------+----------+--------+-----------------+---------------------+---------------------+ 
| id | team_id | position | first |  last  |  created_at  |  updated_at  | 
+----+---------+----------+--------+-----------------+---------------------+---------------------+ 
| 1 |  5 | QB  | Derek | Anderson  | 2013-08-26 18:48:59 | 2013-08-27 20:41:37 | 
| 2 |  24 | QB  | Matt | Barkley   | 2013-08-26 18:48:59 | 2013-08-26 18:48:59 | 
| 3 |  18 | QB  | McLeod | Bethel-Thompson | 2013-08-26 18:48:59 | 2013-08-26 18:48:59 | 
| 4 |  6 | QB  | Matt | Blanchard  | 2013-08-26 18:48:59 | 2013-08-26 18:48:59 | 
| 5 |  26 | QB  | Sam | Bradford  | 2013-08-26 18:48:59 | 2013-08-26 18:48:59 | 
+----+---------+----------+--------+-----------------+---------------------+---------------------+ 

回答

4

首先,您應該使用單數的belongs_to,而不是複數。所以,你的模型變得

class Player < ActiveRecord::Base 
    belongs_to :team 
end 

...和你的表單輸入也是單數形式,與abbr在您選擇顯示的字段,id作爲對您的PARAMS傳遞的實際值:

<%= f.association :team, :label_method => :abbr, :value_method => :id 
+0

感謝您捕捉複雜的問題,這個noob的變量很多;)Theres兩個問題我仍然摔跤,你可能會有所幫助。 1.它沒有正確更新對象(它使用:team_id)和2.我想將其從Team.name(默認)更改爲Team.abbr,我的嘗試不起作用。 –

+1

這是行不通的嗎? 'f.association:team,label_method :: abbr,value_method :: id' – depa

+0

修復了第二個問題。更新問題可能在應用程序的其他地方,因爲其他字段沒有更新。當我弄明白的時候我會回覆。 –

1

傳遞label_method。

<%= f.association :team, label_method: "#{:city} #{:name}" %> 

更好的是,你可能已經到位FULL_NAME功能,只需調用

您可能需要同時使用value_method選項,並設置爲TEAM_ID正確設置它,如果simple_form無法正確猜測表單傳入的關聯

+0

我得到這個錯誤,如果它有助於'未初始化的恆定播放器::團隊',label_method:無法工作不幸 –

+1

你得到這個錯誤,因爲你應該總是用'belongs_to'單數。你應該調用'player'的方法是'team',而不是'teams'。 – depa

+0

啊,很好。編輯。 – TheIrishGuy