has_many и единственное наследование таблицы

Только для TypeScript!

В tsconfig.json добавить…

"compileOnSave": true, 
6
задан vrish88 20 May 2009 в 17:37
поделиться

3 ответа

Если я правильно вас понял, у вас есть сообщения, и сообщения могут быть видео или фото. как сказал Джарил, то, что у вас есть, вероятно, легче всего понять / обработать, однако, если вы хотите пофантазировать, вы можете использовать наследование одной таблицы или полимофические ассоциации.

STI - пример (из Agile Web Development with Rails 3rd Edition)

create_table :people, :force => true do |t|
   t.string :type

   #common attributes
   t.string :name
   t.string :email

   #attributes for type=Customer
   t.decimal :balance, :precision => 10, :scale => 2

   #attributes for type=Employee
   t.integer :reports_to
   t.integer :dept

   #attributes for type=Manager
   #none
end

class Person < ActiveRecord::Base
end

class Customer < Person
end

class Employee < Person
   belongs_to :boss, :class_name => "Manager", :foreign_key => :reports_to
end

class Manager < Person
end

Итак, если вы создаете клиента

Customer.create(:name => 'John Doe', :email => 'john@doe.com', :balance => 78.29)

, вы можете найти его через человека

x = Person.find_by_name('John Doe')
x.class #=> Customer
x.email #=> john@doe.com
x.balance #=> 78.29
x.some_customer_class_method # will work because the Person.find method returned a Customer object

. Таким образом, у вас может быть

class Post < ActiveRecord::Base
end
class Photo < Post
end
class Video < Post
end

, а затем вы можете найти их всех по почте. все, кроме вас, вернутся фото и видео объекты (и опубликовать объекты, если у вас есть сообщения, которые не являются фото или видео)

не забудьте строку: введите в свою таблицу db

5
ответ дан 17 December 2019 в 00:14
поделиться

Это практически самое простое, что вы можете сделать.

Что ж, если бы с фотографиями можно было обращаться так же, как с видео, то, возможно, вы могли бы покончить с STI и использовать именованные области для предоставления доступа к разным типам контента.

2
ответ дан 17 December 2019 в 00:14
поделиться

Я согласен, что пример в вопросе настолько прост, насколько это возможно. Он уже использует НТИ и четко указывает ассоциации.

Кроме того, вы могли бы позже извлечь STI и разделить: photos и: videos в их собственные отдельные таблицы, не изменяя ни единого бита кода модели Feed. Счет!

0
ответ дан 17 December 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: