Я создаю приложение RoR, которое имеет классы User
и Product
. У многих пользователей много фотографий, а также продукт, но каждый должен также иметь один profile_picture
.Rails Active Record Associations для модели, которая может отображаться на разных типах моделей.
Пользователи:
class User < ActiveRecord::Base
has_many :pictures
end
Продукты:
class Product < ActiveRecord::Base
has_many :pictures
end
Я изо всех сил, чтобы определить pictures
модель, которая в настоящее время:
class Picture < ActiveRecord::Base
has_one :user
has_one :product
end
Схема для картин выглядит следующим образом (временные метки опущены для краткости):
create_table "pictures", force: true do |t|
t.string "image_url"
end
наконец у меня есть миграции, чтобы добавить ссылку на изображение профиля для пользователей и продуктов
class AddPicturesToUsersAndWalks < ActiveRecord::Migration
def change
add_column :users, :profile_picture, :picture
add_column :products, :profile_picture, :picture
end
end
Я прочитал http://guides.rubyonrails.org/association_basics.html и http://guides.rubyonrails.org/migrations.html я не понимаю, как эти отношения должны быть сформированы или где в базе данных должны храниться внешние ключи.
Я не могу просмотреть схему для пользователя или продуктов таблицы (rake db:migrate
не жалуется при запуске), потому что возвращается следующая ошибка в файле схемы (я предполагаю, что это связано с profile_picture
в обоих, но им не уверены, как procede :
# Could not dump table "users" because of following NoMethodError
# undefined method `[]' for nil:NilClass
Пожалуйста, обратите внимание, им с помощью Ruby On Rails 4 и базы данных sqlite3
Спасибо, есть способ связать изображение профиля, чтобы я мог получить к нему доступ с помощью @ user.profile_picture тоже? – user3576112
@ user3576112 Похож на 'has_one: profile_picture, class_name:" Изображение ", как:: imageable'. Что-то похожее. –
спасибо, будет ли это сохранено как ссылка в пользовательской таблице или просто picture_id? – user3576112