Ok, więc pomyślałem, że rozumiem, jak działają specyfikacje relacji w szynach, ale walczę z tym przez jeden dzień.odwoływanie się do atrybutów w modelach z relacjami belongs_to poprzez zagnieżdżoną przestrzeń nazw
Jakiś kontekst, mam dwa modele samochodów & Nazwy modeli (np. Impala, ładowarka, itp.), Gdzie samochody są instancjami nazw modeli, a nazwy modeli naprawdę są niczym więcej niż tabelą odnośników nazw modeli i niektórych innych modeli atrybuty poziomu. Kontroler nazwy modelu jest zagnieżdżony w przestrzeni nazw administratora, ponieważ tylko administratorzy mogą używać nazw modeli CRUD. Użytkownicy końcowi mogą dodawać wystąpienia samochodów do modelu Cars.
Więc w routes.rb mam:
resources :cars
namespace :admin do resources :model_names end
Model są określone jako:
class Admin::ModelName < ActiveRecord::Base
end
class Car < ActiveRecord::Base
belongs_to :admin_model_name
end
migracje są:
class CreateCars < ActiveRecord::Migration
def self.up
create_table :cars do |t|
t.string :chassis_number
t.string :description
t.references :admin_model_name
t.timestamps
end
end
class CreateAdminModelNames < ActiveRecord::Migration
def self.up
create_table :admin_model_names do |t|
t.string :model
t.integer :sort_index
#...additional attributes removed
t.timestamps
end
Administrator CRUD z MODELNAME wszystko działa świetnie. Problem dotyczy widoków samochodów. Myślę, że powinno być odniesienie do konkretnej nazwy modeli samochodów takich jak:
<%= @car.admin_model_names.Model =>
Ale pojawia się błąd:
undefined method `admin_model_names' for #<Car:0x000001040e2478>
Próbowałem attr_accessible modelu ModelNames ale bezskutecznie. Dane bazowe są poprawnie przywoływane. Mam również relację HABTMT między samochodami & Użytkownicy i że wszystko działało dobrze, odwołując się nawzajem atrybuty z różnych widoków jednostek. Ale nie udało się tego uruchomić. Czy to z powodu zagnieżdżonego dziedziczenia sterowania zasobami?
Jedyną metodą odsyłania Okazało się, że działa to:
<%= Admin::ModelName.find(@car.admin_model_name_id).model %>
Ale to naprawdę wydaje się być zbyt dużo kodu (i kosztem znaleźć), aby dostać się do tego atrybutu. Czy istnieje sposób Rails?
Z góry dziękuję.
Scott
Nie mogę skomentować ... więc to właściwie ja nie udaje mi się znaleźć odpowiedzi ... ale dla tego, co widzę, nie powinno się oznaczać twojego @car wywołania "nazwa_modelu_administratora" ... w liczbie pojedynczej? – Daniel
Tak, masz rację. Próbowałem wielu wariantów i wkleiłem w kodzie z jednego z "well lets see if works". Z nim w liczbie pojedynczej, jak <% = @ car.admin_model_name.Model%> otrzymuję niezainicjowaną stałą Car :: AdminModelName – Scott