2017-04-12 36 views
0

我正在使用表單來允許用戶爲特定用戶所在的行程創建新的審閱。我的評論表目前有以下專欄(評分,trip_id,說明)。我遇到的問題是顯示用戶所在旅行的城市名稱文本。Rails:Form collection_set,通過關聯表幫助顯示文本

collection_set的Rails Doc接受以下參數: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

取而代之的是collection_select中的city_id,您需要改爲使用城市名稱。下面是做這件事:

首先,加city_nameTrip

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進行數據庫調用。

+0

真棒!這正是我需要的。您能否解釋該方法的工作原理,特別是Trip模型如何訪問城市模型。是否因爲您需要先設置belongs_to關係? – jamesvphan

+1

準確地說 - 添加'belongs_to'允許ActiveRecord知道'city_id'對應於'City',並且在您訪問'city'時爲您加載。有關關聯的文檔很好地解釋了這一點:http://guides.rubyonrails.org/association_basics.html – gwcodes