问题:
我将如何创建一个新模型之间的关联:post.rb
和现有的 2 个模型:类别 + 工作模型?以及我将如何提取post.rb
's 属性content:text
,以便我可以从work#new
-> _form
partial添加一个独特的帖子
work
我在和category
模型之间有多对多的关系:through categorywork
我想添加一个名为的新模型post
,其属性名为content:text
我希望该模型的关联是这样的:每个作品都有很多类别,作品中的每个类别都有一个独特的帖子。
不幸的是,我不知道如何正确地绘制或解释这种关联,因此我将在下面绘制一个临时架构以供参考以及图片。
eg:文字参考
一项工作
- 名称:项目A
许多类别
- 项目 A -> 类别名称:UxD
- 项目 A -> 类别名称:ID
- 项目A -> 类别名称:开发
独特的帖子
- 项目 A -> UxD -> 帖子内容:lorem ipsum 1
- 项目 A -> ID -> 帖子内容:lorem ipsum 2
- 项目A -> 开发-> 帖子内容:lorem ipsum 3
例如:图形参考
工作#索引
作品#show?category1
作品#show?category2
楷模
我将如何编写关联以连接post.rb
到预先存在的多对多关系
class Category < ActiveRecord::Base
validates :name, :presence => true
has_many :categoryworks
has_many :works, :through => :categoryworks
accepts_nested_attributes_for :works
attr_accessible :description, :name, :category_ids, :svg
end
class Categorywork < ActiveRecord::Base
validates :name, :presence => true
has_many :categoryworks
has_many :categories, :through => :categoryworks
accepts_nested_attributes_for :categories
attr_accessible :name, :subtitle, :category_ids, :svg
end
class Categorywork < ActiveRecord::Base
belongs_to :category
belongs_to :work
attr_accessible :category_id, :work_id
end
控制器
works_controller: 新控制器中多对多关联的示例
我要添加什么work_controller.rb
来访问post.rb
attr content:text ?
def new
@work = Work.new
@all_categories = Category.all
@work_category = @work.categoryworks.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @work }
end
end
意见
_form Partial :显示类别和作品之间的多对多
我会写什么来添加post.rb
attr content:text 到这个表单的每个复选框
<div class="field">
<%= hidden_field_tag "work[category_ids][]", nil %>
<% Category.all.each do |category| %>
<%= check_box_tag "work[category_ids][]", category.id, @work.category_ids.include?(category.id), id: dom_id(category) %>
<%= label_tag dom_id(category), category.name %><br>
<% end %>
</div>