rails 4 - 在collection_select中连接字段

时间:2014-03-19 22:30:48

标签: ruby-on-rails ruby ruby-on-rails-4 html-select

我正在通过几个教程学习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值。这可能吗?

3 个答案:

答案 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"} %>

documentation

中详细了解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参数已替换为firstlast,表示value_methodfirsttext_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 %>