为HABTM选择许多框

时间:2012-08-08 09:12:47

标签: ruby-on-rails ruby ruby-on-rails-3

我有两个型号;在它们之间具有HABTM关联的问题和类别。现在我想要一个表格,我可以编辑问题类别,但我不知道如何。我从这开始,但我迷路了,我不确定如何命名“名称”属性等以及如何自动编辑/创建问题,我该如何设置?

<%= f.fields_for :categories do |categories_form| %>
        <%= categories_form.select "category_ids", Category.all.collect { |c| [c.description, c.id] }, {}, {:multiple => true, :size => 9} %>
    <% end %>

我成功设置了问题(has_many) - &gt;回答fields_for和accepts_nested_attributes_for,但不是这个。

2 个答案:

答案 0 :(得分:1)

你应该看一下Ryan Bates Nested Model Form Part 1Nested Model Form Part 2的以下截屏视频。

答案 1 :(得分:0)

<强>迁移

您需要为表格

创建迁移

您需要为关联的中间表创建迁移 +关联创建的中间表名称为:categories_questions 或:questions_categories,在第二种情况下,您必须在模型中定义名称,如链接中所示 Do I need to manually create a migration for a HABTM join table?

class CreateCategoriesQuestions < ActiveRecord::Migration
  def self.up
    create_table :categories_questions, :id => false do |t|
        t.references :category
        t.references :question
    end
    add_index :categories_questions, [:category_id, :question_id]
    add_index :categories_questions, [:question_id, :category_id]
  end

  def self.down
    drop_table :categories_questions
  end
end

问题模型

class Question < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

类别模型

class Category < ActiveRecord::Base
  has_and_belongs_to_many :questions
end

控制器Stuf

<强> questions_controller.rb

def new
  @question = Question.new
  @question.categories.build #Build a categories_questions so as to use fields_for 
end  

表单内容

= f.fields_for :categories do |categories_fields|
  = categories_fields.text_field :name
  = categories_fields.text_field :description

此时我必须告诉你(我是ruby&amp; rails中的新手),在这里创建一个新对象你可以使用jquery正确附加一个html块名,或者创建帮助器(最后使用javascript)要添加新对象并在保存时保存关联。 在下一个链接中,有人展示了确切的方式。

http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for#512-Setting-child-index-while-using-nested-attributes-mass-assignment