Jaki rodzaj asocjacji?

Witam!
Mam car_model, car_marke polaczone ze soba.

class CarMarke < ActiveRecord::Base
  attr_accessible :name
  has_many :car_models
end

class CarModel < ActiveRecord::Base
   attr_accessible :name, :car_marke_id
   belongs_to :car_marke
   validates :name, :car_marke_id, presence: true
end

Mam tez Posts ktory chcialbym polaczyc z car model, Czyli tworzac posta wybieram najpierw marke potem model samochodu. Wydaje mi sie ze wystarczy do tabeli Posts dodac car_model_id, jaka powinna byc asocjacja? Poniewaz jeden post powinien miec jeden samochod

class Post < ActiveRecord::Base
has_one :car_model, through: :car_marke
end

???
Czy moze jakos inaczej nalezy to rozwiazac

przede wszystkim nie uzywaj attr_accessible, w rails 4 ta funkcjonalność jest w kontrolerze.
Dopisz do modelu Post has_one :car_marke, poza tym nie ma po co dorzucac do tabeli car_model_id, ta asocjacja jest pośrednia

A has_one to nie jest przypadkiem dla relacji jeden-jeden? Jeśli Post może mieć jeden model ale ten sam model może występować w wielu postach (tego nie dopisałeś), to raczej będzie belongs_to.
Wtedy masz np. @my_first_post.model.name (a idąc dalej @my_first_post.model.marke.name).
Tworząc posta wybierasz tak naprawdę model a tylko wizualnie dokładasz jeszcze jeden krok w postaci wyboru najpierw marki.

[quote=torrance]przede wszystkim nie uzywaj attr_accessible, w rails 4 ta funkcjonalność jest w kontrolerze.
Dopisz do modelu Post has_one :car_marke, poza tym nie ma po co dorzucac do tabeli car_model_id, ta asocjacja jest pośrednia[/quote]
Dzięki tutaj wykorzystuje Rails 3.2.14,

[quote=torrance]A has_one to nie jest przypadkiem dla relacji jeden-jeden? Jeśli Post może mieć jeden model ale ten sam model może występować w wielu postach (tego nie dopisałeś), to raczej będzie belongs_to.
Wtedy masz np. @my_first_post.model.name (a idąc dalej @my_first_post.model.marke.name).
Tworząc posta wybierasz tak naprawdę model a tylko wizualnie dokładasz jeszcze jeden krok w postaci wyboru najpierw marki.[/quote]
Masz rację powinno być belongs_to.

CarMarke jako nazwa modelu wydaje się dziwna, czy nie powinno być CarMake?

Tak powinno :slight_smile: