2017-04-12 3 views
0

私はフォームを使用して、特定のユーザーが行った旅行に新しいレビューを作成できます。私のレビューテーブルには現在、以下の列(rating、trip_id、description)があります。私が抱えている問題は、ユーザーが行った旅行から都市名のテキストを表示することです。Rails:form collection_set、関連するテーブルを介してテキストを表示するのに役立ちます

Rails Doc for collection_setは、collection_select(メソッド、コレクション、value_method、text_method、options = {}、html_options = {})のargsを受け入れます。テキストメソッドに関して、私は旅行の実際の都市名を表示できるようにしたいが、都市名はtripテーブル内の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_selectcity_idの代わりに、代わりに都市名を使用すると便利です。ここではそれを行うための一つの方法です:まず

、あなたの選択を変更後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のデータベース呼び出しを行いません。

+0

恐ろしいですね!これはまさに私が必要としていたものです。方法がどのように機能するか、具体的にどのようにTripモデルがCityモデルにアクセスできるかを説明できますか? belongs_to関係を最初に設定する必要があるからですか? – jamesvphan

+1

正確には 'belongs_to'を追加すると、' city_id'が 'City'に対応することをActiveRecordが知ることができ、' city'にアクセスするときに読み込まれます。団体に関する文書はこれについてよく説明しています:http://guides.rubyonrails.org/association_basics.html – gwcodes

関連する問題