2011-09-03 153 views
0

我试图建立一个应用程序,其中有一个“作业”模型可以与“标记”模型相关联,其中关联使用连接表进行跟踪。我想找到它可以使用基于资源的form_for在表单中添加复选框,以允许用户选择与作业关联的标签。标签列表由管理员设置,因此它们不会创建新标签,而是创建关联。我不知道如何去做。大多数例子使用博客场景,文章has_many评论,他们正在创建新的评论,并且与我试图做的非常不同。REST风格form_for通过连接表嵌套资源

型号:

class Job < ActiveRecord::Base 
    has_and_belongs_to_many :tags, :join_table => 'j_map_tags', :class_name => 'Tag', :foreign_key => 'job_id', :association_foreign_key => 'tag_id' 
end 

class Tag < ActiveRecord::Base 
    has_and_belongs_to_many :jobs, :join_table => 'j_map_tags', :class_name => 'Job' 
end 

class JMapTag < ActiveRecord::Base 
    belongs_to :job 
    belongs_to :tag 
end 

加入表迁移:

class CreateJMapTags < ActiveRecord::Migration 
    def self.up 
     create_table :j_map_tags, :id => false do |t| 
      t.column :job_id, :integer 
      t.column :tag_id, :integer 
     end 
    end 

    def self.down 
     drop_table :j_map_tags 
    end 
end 

路线:

resources :jobs, :module => 'manager', :constraints => lambda { |request| request.xhr? } do 
    resources :tags 
end 

ERB:

<%= form_for [Job.new], :remote => true do |form| %> 
    ... 
    <% form.label ???????? %> 
    <% form.check_box ???????? %> 
    ... 
<% end %> 

这甚至可以通过基于资源的form_for?我一直无法找到涉及此类资源关系的任何示例。

回答

0

我认为这是你需要的:HABTM Checkboxes

+0

谢谢,这样做更有意义。我迷路了,寻找一种方法来做form.check_box而不是check_box_tag,并且当两者之间没有建立任何关系时,如何迭代这组标签,我感到困惑。 Thaks为链接! – Reuben

+0

没问题。如果这回答你的问题,请将其标记为正确答案。 – Mirko

+0

对于那些使用Railscasts订阅的用户,修改了HABTM复选框。 http://railscasts.com/episodes/17-habtm-checkboxes-revised –