在双向上创建属于关联的多对多

时间:2013-07-17 03:10:53

标签: ruby-on-rails many-to-many rails-activerecord

问题:

如何在新模型post.rb和现有2个模型之间创建关联:类别+工作模型?我如何获取post.rb的属性content:text,以便我可以添加来自work#new - >的唯一帖子。 _form部分

workcategory型号:through categorywork

之间存在多对多的关系

我想添加一个名为post的新模型,其中包含一个名为content:text的属性。我希望此模型的关联是这样的:每个工作都有很多类别,每个类别工作中的类别有一个独特的帖子。

不幸的是,我不知道如何正确地绘制或解释这种关联,所以我将在下面绘制一个临时架构以供参考。

例如:文字参考

一项工作

  • 名称:项目A

多个类别

  • 项目A - >类别名称:UxD
  • 项目A - >类别名称:ID
  • 项目A - >类别名称:开发

独特帖子

  • 项目A - > UxD - >发布内容:lorem ipsum 1
  • 项目A - > ID - >发布内容:lorem ipsum 2
  • 项目A - >发展 - >发布内容:lorem ipsum 3

例如:图形参考

工作#索引

work#index


工作#节目?类别1

work#show?category1


工作#节目?类别2

work#show?category2





Models

如何编写关联以将post.rb连接到预先存在的多对多关系

category.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

work.rb

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

categorywork.rb

class Categorywork < ActiveRecord::Base

  belongs_to    :category
  belongs_to    :work
  attr_accessible :category_id, :work_id
end

Controllers

works_controller新控制器中多对多关联的示例

我将work_controller.rb添加哪些内容才能访问post.rb attr内容:文字?

 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

Views

_form Partial显示类别与作品之间的多对多

我会写什么来将post.rb attr内容:文本添加到此表单的每个复选框

<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>

0 个答案:

没有答案