2017-07-10 12 views
-1

現在、ユーザーの移動を追跡するアプリケーションを作成しようとしています。理想的には、ユーザーが訪問した国を選択し、自分が選択した国で自分が訪れた都市を選択できるようにしたいと考えています。Ruby on Railsデータテーブルの設定

私の最初のセットアップでは、シナリオをテストしている間に、トリップモデルを通じてユーザーモデルと国モデルの多対多の関係を設定することができました。 Cityモデルを追加してセットアップしようとすると、私の混乱が起こります。 Countryモデル(例belongs_to :country)と1対多の関係があり、ユーザーモデルに多対多の関係があることはわかっています。私が望んでいないのは、ユーザーが最初に国を割り当てることなく都市を割り当てることができることです。シンプルなように思えますが、このシナリオを動作させるために何らかのバリデーションを行わなければならないと考えていますが、自分のニーズに正確な答えを見つけることはできません。

ご協力いただければ幸いです。

答えて

0

旅行モデルを使用してユーザーと都市の間に多人数を設定してから、国と都市の間で1対多に設定するとどうでしょう。

class User < ActiveRecord::Base 
    # -> trips -> cities 
    has_many :trips, :dependent => :destroy 
    accepts_nested_attributes_for :trips, :allow_destroy => :true 
    has_many :cities, through: :trips 
end 

class Trip < ActiveRecord::Base 
    belongs_to :User 
    belongs_to :City 
end 

class City < ActiveRecord::Base 
    # -> trips -> users 
    has_many :trips, :dependent => :destroy 
    accepts_nested_attributes_for :trips, :allow_destroy => :true 
    has_many :users, through: :trips 
    # -> 
    belongs_to :Country 
end 

class Country < ActiveRecord::Base 
    # -> cities 
    has_many :cities, :dependent => :destroy 
    accepts_nested_attributes_for :cities, :allow_destroy => :true 
end