【发布时间】:2015-08-13 01:37:19
【问题描述】:
我正在通过 RubyOnRails 开发一个门户网站,学生、老师和家长可以在该门户网站上使用他们的艺术作品参加不同的比赛。
有 3 个实体:Contests、Categories(竞争对手类别/年龄组)和Nominations(活动种类)。 Contest 可以有多个 Categories。每个ContestCategory 可以有多个Nominations。每个Category 可以属于多个Contests。每个Nomination 可以属于多个ContestCategories。所以我假设Contests和Categories之间存在多对多关系,ContestCategories和Nominations之间存在多对多关系。我创建了以下模型:Contest (contest.rb)、Category (category.rb)、Nomination (nomination.rb)、ContestCategory (contest_category.rb) 和 ContestCategoryNomination (contest_category_nomination.rb) )。
我的模型:
class Category < ActiveRecord::Base
has_many :contest_categories
has_many :contests, through: :contest_categories
end
class Contest < ActiveRecord::Base
has_many :contest_categories
has_many :categories, through: :contest_categories
has_many :nominations, through: :contest_categories
has_one :provision
end
class ContestCategory < ActiveRecord::Base
belongs_to :contest
belongs_to :category
has_many :contest_category_nominations
has_many :nominations, through: :contest_category_nominations
end
class ContestCategoryNomination < ActiveRecord::Base
belongs_to :contest_category
belongs_to :nomination
end
class Nomination < ActiveRecord::Base
has_many :contest_category_nominations
has_many :contest_categories, through: :contest_category_nominations
has_many :contests, through: :contest_categories
end
我想在创建新的Contest 期间创建一个基于 ajax 的模式窗口,以将其与Category 链接并选择多个属于此Category 的Nominations。
- 我应该创建什么控制器来满足 has_many 关系 我的模型之间?
- rails 中有哪些命名约定(单数和复数)以满足我的需求
关系?例如,
ContestsCategoriesController或ContestCategoryNominationsController或者可能是ContestCategoryNominationsController? - 我应该在这个控制器中创建什么动作方法来调用
渲染这个模态窗口?应该是
new_category行动CategoriesController或newContestsCategoriesController中的操作 或newContestsCategoriesNominationsController中的操作?
【问题讨论】:
-
您想以一种形式还是以多种形式创建或更新相关对象(竞赛、类别和提名)?
-
我计划以模态形式创建/更新类别和提名,因此在关闭后会将数据传输到主表单(创建/编辑比赛页面)并保存比赛也将调用保存链接到它的类别和提名。至少这是我想到的唯一解决方案。
-
任何答案对您有帮助吗?还是您需要更多帮助?
-
如果我决定将类别/提名链接到单个页面上的竞赛怎么办?例如,通过定义当我在新竞赛页面上按下“添加类别”按钮时呈现的部分。
标签: ruby-on-rails model-view-controller architecture modal-dialog naming-conventions