提交多对多的数据库关联

时间:2016-09-12 18:31:28

标签: ruby-on-rails ruby

图库,类别是使用脚手架生成的,我没有对控制器进行任何更改,他们有一个has_and_belongs_to_many关联,并且连接表已存在。类别已经存在,我想将它添加到我正在创建的图库中以下代码来自的表格。

下拉菜单显示数据库中的所有类别。我想将数据提交到数据库,也就是说我希望在创建新图库时包含两个ID的连接表中有一个新条目

这是我的表格:

#_form.html.erb (For Galleries)
<div class="dropdown">
  <%= f.label "Choose Category" %>
  <%= f.select :id, Category.all.map{|g,v| [g.name,g.id]}, :class => 'dropdown-menu' %> </div>
<div class="actions">
  <%= f.submit %>
</div>

有人可以告诉我为了让它有效,我必须对控制器进行哪些更改?

3 个答案:

答案 0 :(得分:0)

结帐http://guides.rubyonrails.org/association_basics.html。我认为它解释的非常好。

我想它应该是这样的:

category = Category.find_by(name: params[:name])
category.galleries.build(attributes)

答案 1 :(得分:0)

我试图帮助我理解你需要将id保存到另一张桌子吗?

<%= f.select :ids, options_from_collection_for_select(Category.all.sort_by(&:name), :id, :name, f.object._ids), {}, include_blank: true, multiple: true%>

控制器的参数

params.require(:sampletable).permit(:name, :ids => [])

如果我错了,请纠正我,我想帮助你,谢谢

答案 2 :(得分:0)

由于分步指南,我确实找到了解决方案。

categories_controller:

@galleries = Gallery.all
#had to add that to edit & new

#category_params
params.require(:category).permit(:name, :gallery_ids =>[])

gallery_controller:

#new,edit
@categories = Category.all    

#category_params
params.require(:gallery).permit(:title, :image, :description, :category_ids =>[])

类别观点:

#_form.html.erb
<div class="field">
<%= collection_check_boxes(:category, :gallery_ids, @galleries, :id, :title) %>
</div>

#index.html.erb
<p><%= category.galleries.map {|g| g.title}.join(', ') %></p>

#show.html.erb
<%= @category.galleries.map {|g| g.title}.join(', ') %>

图库视图:

#_form.html.erb
<%= collection_check_boxes(:gallery, :category_ids, @categories, :id, :name) %>

#index.html.erb
<p><%= gallery.categories.map {|c| c.name}.join(', ') %></p>

#show.html.erb
<%= @gallery.categories.map {|c| c.name}.join(', ') %>

它现在正在运作。