У меня есть три модели: Thing, Category и Rating. Вещи и категории имеют друг друга друг от друга: через: category_things, но только категория has_many Ratings, через: category_ratings. Я хочу поставить @ thing.categories.ratings в моем представлении Thing, но я не могу понять, как определить его в контроллере Things. Вот что я пытался до сих пор:Rails: Как определить подмодуль одной модели в контроллере третьей модели?
class ThingsController < ApplicationController
def show
@thing = Thing.find(params[:id])
@category = Category.all
@thing.categories.build
@category_thing = CategoryThing.all
@category_rating = CategoryRating.all
@rating = Rating.all
@thing.categories.ratings.build
end
end
Но когда я иду в Thing/шоу точки зрения, я получаю следующее сообщение об ошибке:
undefined method 'ratings' for #<ActiveRedord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Category:0xb34c6d24>
вещь Модель:
class Thing < ActiveRecord::Base
has_many :category_things
has_many :categories, :through => :category_things
attr_accessor :category_names
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "30x30!" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end
Категория Модель:
class Category < ActiveRecord::Base
has_many :category_ratings
has_many :ratings, :through => :category_ratings
has_many :category_things
has_many :things, :through => :category_things
end
Категория: Модель:
class CategoryThing < ActiveRecord::Base
belongs_to :category
belongs_to :thing
end
Рейтинг модели:
class Rating < ActiveRecord::Base
has_many :category_ratings
has_many :categories, :through => :category_ratings
has_many :thing_ratings
has_many :things, :through => :thing_ratings
has_many :up_votes
has_many :down_votes
end
CategoryRating Модель:
class CategoryRating < ActiveRecord::Base
belongs_to :category
belongs_to :rating
end
Я использую Rails 4.0.10.
Правильно. У одного объекта есть 'рейтинги', коллекция таких объектов нет. Подумайте о том, чтобы смотреть на «нетерпеливую загрузку». Этого недостаточно для ответа, это скорее направление поиска. –
Я исследовал нетерпеливую загрузку, но я не уверен, как это может привести к решению моей проблемы. –
покажите нам свои модели с их ассоциациями, пожалуйста. – Anthony