Rails:表单collection_set,帮助通过关联表显示文本

时间:2017-04-12 13:28:29

标签: ruby-on-rails

我正在使用表单允许用户为特定用户所在的行程创建新的评论。我的评论表目前有以下列(评级,trip_id,描述)。我遇到的问题是显示用户所在旅行的城市名称文本。

Rails Doc for collection_set接受以下args:collection_select(method,collection,value_method,text_method,options = {},html_options = {})。在文本方法方面,我希望能够显示旅行的实际城市名称,但是,城市名称由旅行表中的city_id引用。我不确定如何访问通过其关联存在的列。

旅行表(user_id,city_id) 城市表(名称,描述)

<%= form_for @review do |f| %>
  <%= f.label :rating %>
  <%= f.number_field :rating %> <br>

  <%= f.label :trip_id %>
  <%= f.collection_select :trip_id, @user.trips, :id, :city_id %>

  <%= f.label :description %>
  <%= f.text_area :description %> <br>

  <%= f.submit %>
<% end %>

我第一次询问有关铁轨的表格,所以请告诉我如何更新问题以便更好地了解。

1 个答案:

答案 0 :(得分:1)

而不是city_id中的collection_select,而是您想要使用城市名称。这是一种方法:

首先,将city_name添加到Trip

class Trip < ActiveRecord::Base
  belongs_to :city
  def city_name
    city.name
  end
end

然后修改您的选择:

<%= f.collection_select :trip_id, @user.trips.includes(:city), :id, :city_name %>

includes(:city)位将帮助您避免N + 1查询问题,以便每个Trip不会为City拨打数据库。