У меня есть три таблицы: Пользователь, Типы пользователя и Покупки.
Пользователь: Идентификатор и т. Д.
user_purchase_types : id, typename, user_id
покупок: id, user_id, user_purchase_type_id, примечание
пользователейможет иметь любое количество покупок и user_types.Покупка может иметь один user_purchase_type.
Пользователи могут входить в систему, создавать типы, делать покупки и т. Д. - все это прекрасно работает
Однако я хочу, чтобы при перечислении покупок видеть user_purchase_types.typename,а не идентификационный номер.Я думаю, все просто, если он принадлежит, у них уже есть нужные поля идентификаторов, они должны просто работать.Но это не так
Я пробовал миллион вариаций принадлежащих ему: has_many, has_many и т. Д. И т. Д., Но не могу получить правильные отношения и поэтому показываю имя типа, а не id.
В таблицах указаны правильные поля идентификатора Foreign_key, поэтому это должно работать.
При перечислении покупок в контроллере покупок я использую @purchase = current_user.purchases.Зацикливая это для отображения в представлении, я думаю, что я должен быть в состоянии использовать purchase.user_purchase_type.typename, но это дает мне 'NoMethodError'.
Что я делаю неправильно, или я должен просто денормализовать БД и иметьс этим покончено?
РЕДАКТИРОВАТЬ Модели как req
class UserPurchaseType < ActiveRecord::Base
belongs_to :user
belongs_to :purchase
attr_accessible :typename, :id
end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :purchases, :dependent => :destroy
has_many :user_purchase_types, :dependent => :destroy
end
class Purchase < ActiveRecord::Base
belongs_to :user
has_many :user_purchase_types
attr_accessible :date, :user_purchase_type_id, :note
end
файл index.erb
<% @purchases.each do |purchase| %> #this works
<tr>
<td><%= purchase.user_purchase_type.typename %></td> #this fails
<td><%= purchase.date %></td>
<td><%= purchase.note %></td>
</tr><p>
<% end %>
контроллер покупки
def index
@user_purchase_types = current_user.user_purchase_types # this works
@purchases = current_user.purchases #this works