我很难让:association
助手工作。基本上我想要一个包含所有32个团队的选择框,而不是一个无用的:team_id
数字,我想使用ActiveRecord魔术代替相应的团队显示'abbr'或'city'。我正在使用MySQL DB btw。
模型
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 |
+----+---------+----------+--------+-----------------+---------------------+---------------------+
答案 0 :(得分:4)
首先,你应该使用belongs_to
的单数,而不是复数。所以你的模型变成了
class Player < ActiveRecord::Base
belongs_to :team
end
...您的表单输入也是单数形式,abbr
作为您选择中的显示字段,id
作为传递给您的参数的实际值:
<%= f.association :team, :label_method => :abbr, :value_method => :id
答案 1 :(得分:1)
传递label_method。
像
<%= f.association :team, label_method: "#{:city} #{:name}" %>
更好的是,您可能已经具有full_name功能,只需调用
即可您可能还必须使用value_method选项并设置为team_id以正确设置它,如果simple_form无法正确猜测传入的关联