我正在通过几个教程学习Rails 4,并构建一个演示应用程序。
我有一个名为players
的表,它链接到team
表。球队有很多球员,球员只有一支球队。因此,我使用collection_select
标记将团队数据提取到播放器表单中。
看起来像这样:
<%= collection_select :player, :team_id, Team.find(:all), :id, :name, options ={:prompt => "Select a team"} %>
这很好 - 但我希望格式看起来像#34;团队名称:Team City&#34; - 我无法弄清楚如何连接{{1然而,标签中的{}和:name
值。这可能吗?
答案 0 :(得分:12)
在Team
模型中创建一个方法,如下所示
def name_with_city
"#{name}: #{city}"
end
然后使用它如下
<%= collection_select :player, :team_id, Team.find(:all), :id, :name_with_city, {:prompt => "Select a team"} %>
中详细了解collection_select
答案 1 :(得分:0)
您可以根据自己的喜好格式化集合:
<%= collection_select :player,
:team_id,
Team.find(:all).collect { |t| [ t.id, "#{t.name}: #{t.city}" ] },
:first,
:last,
{ prompt: "Select a team" } %>
:id
和:name
参数已替换为first
和last
,表示value_method
为first
和text_method
}成为每个数组的last
个元素。
答案 2 :(得分:0)
如果您的表单根据参数查找值并且您需要这些值,则模型方法不是很方便。假设您的控制器使用@searched_record
方法,您可以执行类似
<% @base_params = @searched_record.one_value << "=>" << @searched_record.second_value << "; " << (l(@searched_record.starts, :format => :long)) << ", " << @searched_record.other_value.description %>
<%= f.text_area :content, :rows => 5, value: @base_params %>