Association Rails 4 ile has_many ile ilgili sorunlar

Bu yüzden mevcut hava durumunu depolayan bir veritabanı yapmaya çalışıyorum:

 --------------             ------------------            ----------
|              | 1       * |                  |*       1 |          | 
| YearMonthDay |-----------| WeatherCondition |----------| Location |
|              |           |                  |          |          |
 --------------             ------------------            ----------

Belongs_to ve has_many kullanarak modeller oluşturdum

class WeatherCondition < ActiveRecord::Base
    belongs_to :year_month_day
    belongs_to :location
end

class YearMonthDay < ActiveRecord::Base
    has_many :weather_conditions
    has_many :locations, :through => :weather_conditions
 end

class Location < ActiveRecord::Base
    has_many :weather_conditions
    has_many :year_month_days, :through => :weather_conditions
end

Ve ayrıca her biri için bir göç yarattı, YearMonthDay ve Locations olanlar normal ve Hava Koşulları şöyle:

class CreateWeatherConditions < ActiveRecord::Migration
  def change
    create_table :weather_conditions do |t|
        t.belongs_to :location, index: true
        t.belongs_to :year_month_day, index: true

      t.timestamps null: false
    end
  end
end

Neyi yanlış yaptığım hakkında hiçbir fikrim yok, ancak bir hata alıyorum:

 unknown attribute 'year_month_day_id' for WeatherCondition.
0
Pastebin modellerine baktığımızda, pek çok ilişkiye ihtiyacınız yok. Havanın tarihe ve yere bağlı olduğu tarih-hava-konum arasında birebir ilişki kurmanız gerekir. Eğer kimse buna cevap vermezse, bu akşam cevabımı değiştireceğim.
katma yazar Matt Stevens, kaynak
PS. Modelleriniz yabancı anahtarlardan yoksundur.
katma yazar Matt Stevens, kaynak
PS. Modelleriniz yabancı anahtarlardan yoksundur.
katma yazar Matt Stevens, kaynak
Pastebin modellerine baktığımızda, pek çok ilişkiye ihtiyacınız yok. Havanın tarihe ve yere bağlı olduğu tarih-hava-konum arasında birebir ilişki kurmanız gerekir. Eğer kimse buna cevap vermezse, bu akşam cevabımı değiştireceğim.
katma yazar Matt Stevens, kaynak

6 cevap

Yine de yabancı anahtarları WeatherConditions'a eklemeniz gerekir:

Yeni bir tablo oluşturuyorsanız:

class CreateWeatherConditions < ActiveRecord::Migration
  def change
    create_table :weather_conditions do |t|
        t.integer :location_id
        t.integer :year_month_day_id

      t.timestamps null: false
    end
  end
end

Zaten masaya sahipseniz:

class CreateWeatherConditions < ActiveRecord::Migration
  def change
    add_column :weather_conditions, :location_id, :integer
    add_column :weather_conditions, :year_month_day_id, :integer
  end
end
2
katma
Bu bana mantıklı gelmiyordu:
katma yazar Manoel Ribeiro, kaynak
cümlenizde iki ifs var, biraz daha detaylandırabilir misiniz?
katma yazar Manoel Ribeiro, kaynak
Neyin mantıklı olmadığını açıklayabilir misin?
katma yazar forthowin, kaynak
Zaten masaya sahip olup olmadığına bağlı olarak birini veya diğerini kullanın.
katma yazar forthowin, kaynak

Yine de yabancı anahtarları WeatherConditions'a eklemeniz gerekir:

Yeni bir tablo oluşturuyorsanız:

class CreateWeatherConditions < ActiveRecord::Migration
  def change
    create_table :weather_conditions do |t|
        t.integer :location_id
        t.integer :year_month_day_id

      t.timestamps null: false
    end
  end
end

Zaten masaya sahipseniz:

class CreateWeatherConditions < ActiveRecord::Migration
  def change
    add_column :weather_conditions, :location_id, :integer
    add_column :weather_conditions, :year_month_day_id, :integer
  end
end
2
katma
Bu bana mantıklı gelmiyordu:
katma yazar Manoel Ribeiro, kaynak
cümlenizde iki ifs var, biraz daha detaylandırabilir misiniz?
katma yazar Manoel Ribeiro, kaynak
Neyin mantıklı olmadığını açıklayabilir misin?
katma yazar forthowin, kaynak
Zaten masaya sahip olup olmadığına bağlı olarak birini veya diğerini kullanın.
katma yazar forthowin, kaynak

Çoktan çoğa ilişki oluşturarak, bir has_and_belongs_to_many notasyonuna ihtiyacınız var.

class YearMonthDay < ActiveRecord::Base
    has_and_belongs_to_many :locations
end

class Location < ActiveRecord::Base
    has_and_belongs_to_many :year_month_days
end

WeatherConditions sınıfını bırakın, yalnızca iki modelle eşleşmesi için adlandırılması gereken birleştirme tablosuna ihtiyacınız var. İsimler alfabetik sırada olmalıdır.

create_table :locations_year_month_days, id: false do |t|
    t.belongs_to :location, index: true
    t.belongs_to :year_month_day, index: true

  t.timestamps null: false
end

İlişkiyi sürdürdükten sonra, o tarihe bağlı bir konum nesnesi dizisi almak için my_date.locations'ı veya tersi için my_location.year_month_dates'i arayabilirsiniz.

Bu

0
katma
Ayrıca yaptığım gibi olabilir, ancak, aynı kılavuza bakın!
katma yazar Manoel Ribeiro, kaynak
Ben arasında olsa niteliklere ihtiyacım var: /
katma yazar Manoel Ribeiro, kaynak
Evet, ama bulduğun gibi, çok daha karmaşık ve hataya açık.
katma yazar Matt Stevens, kaynak

Çoktan çoğa ilişki oluşturarak, bir has_and_belongs_to_many notasyonuna ihtiyacınız var.

class YearMonthDay < ActiveRecord::Base
    has_and_belongs_to_many :locations
end

class Location < ActiveRecord::Base
    has_and_belongs_to_many :year_month_days
end

WeatherConditions sınıfını bırakın, yalnızca iki modelle eşleşmesi için adlandırılması gereken birleştirme tablosuna ihtiyacınız var. İsimler alfabetik sırada olmalıdır.

create_table :locations_year_month_days, id: false do |t|
    t.belongs_to :location, index: true
    t.belongs_to :year_month_day, index: true

  t.timestamps null: false
end

İlişkiyi sürdürdükten sonra, o tarihe bağlı bir konum nesnesi dizisi almak için my_date.locations'ı veya tersi için my_location.year_month_dates'i arayabilirsiniz.

Bu

0
katma
Ayrıca yaptığım gibi olabilir, ancak, aynı kılavuza bakın!
katma yazar Manoel Ribeiro, kaynak
Ben arasında olsa niteliklere ihtiyacım var: /
katma yazar Manoel Ribeiro, kaynak
Evet, ama bulduğun gibi, çok daha karmaşık ve hataya açık.
katma yazar Matt Stevens, kaynak

Raylar, çoğul tablolara özeldir. Year_month_day'nin çoğullaştırılmasının nasıl yapıldığını anlayamayabilir. Şemaların neye benziyor?

0
katma
Eklemek zorunda mıyım? Bu kimliğin has_many olayı olduğunda geldiğini sanıyordum
katma yazar Manoel Ribeiro, kaynak
tam olarak söylenenleri takip ediyorum.
katma yazar Manoel Ribeiro, kaynak
katma yazar Manoel Ribeiro, kaynak
eklemek zorundasın. has_many meselesi şemayı etkilemez, sadece göç eder
katma yazar forthowin, kaynak
@ManoelRibeiro, kafam karıştı, pastebin zaten bir weather_conditions tablosu olduğunu gösteriyor. Konumu ve year_month_day kimliğini eklemek ister misiniz?
katma yazar forthowin, kaynak
Create table yerine, iki add_columns ekleyin.
katma yazar virtual_monk, kaynak

Raylar, çoğul tablolara özeldir. Year_month_day'nin çoğullaştırılmasının nasıl yapıldığını anlayamayabilir. Şemaların neye benziyor?

0
katma
tam olarak söylenenleri takip ediyorum.
katma yazar Manoel Ribeiro, kaynak
Eklemek zorunda mıyım? Bu kimliğin has_many olayı olduğunda geldiğini sanıyordum
katma yazar Manoel Ribeiro, kaynak
katma yazar Manoel Ribeiro, kaynak
eklemek zorundasın. has_many meselesi şemayı etkilemez, sadece göç eder
katma yazar forthowin, kaynak
@ManoelRibeiro, kafam karıştı, pastebin zaten bir weather_conditions tablosu olduğunu gösteriyor. Konumu ve year_month_day kimliğini eklemek ister misiniz?
katma yazar forthowin, kaynak
Create table yerine, iki add_columns ekleyin.
katma yazar virtual_monk, kaynak