Модель
group.rb
class Group < ActiveRecord::Base
validates_presence_of :name
has_many :activities, :through => :group_activity
end
activity.rb
class Activity < ActiveRecord::Base
validates_presence_of :name
belongs_to :group
has_many :occurances, :through => :activity_occurance
end
occurance.rb
class Activity < ActiveRecord::Base
validates_presence_of :date
belongs_to :activity
end
Миграции (отдельно или все вместе)
add_everything.rb
class AddEverything < ActiveRecord::Migration
def self.up
create_table :groups, :force => true do |t|
t.string :name
t.timestamps
end
create_table :group_activity, :force => true do |t|
t.integer :group_id, :activity_id
t.timestamps
end
create_table :activities, :force => true do |t|
t.string :name
t.timestamps
end
create_table :activity_occurance, :force => true do |t|
t.integer :activity_id, :occurance_id
t.timestamps
end
create_table :occurance, :force => true do |t|
t.datetime :date
t.timestamps
end
end
def self.down
drop_table :groups
drop_table :activities
drop_table :occurances
drop_table :group_activity
drop_table :activity_occurance
end
end
Это заботится о вашей модели работы. В вашем представлении групп _form я бы добавил имя вашей связанной группы и fields_for для имени вашей деятельности и fields_for occurance. В вашем случае используйте этот удобный инструмент выбора даты и времени jQuery, который является расширением поля выбора даты jQuery, чтобы заполнить поле своего события:
http://puna.net.nz/timepicker.htm
У вас также должны быть отдельные представления для управления действиями отдельно с соответствующей формой. На вашей странице показа отображение других полей довольно стандартно, но для случаев вы можете иметь что-то вроде (синтаксис haml):
= @group.name
- for activity in @group.activities
= activity.name
- for occurance in activity.occurances
= occurance.date.strftime("%A at %r")
Надеюсь, это хотя бы поможет вам начать. Вы можете добавить дополнительную логику для проверки Activity.occurances.size для форматирования соответственно, если вы хотите отобразить что-то day1 / day2 / day3