簡體   English   中英

Rails 4 - has_and_belongs_to_many關聯的復選框

[英]Rails 4 - checkboxes for has_and_belongs_to_many association

我最近在Rails 4中獲取has_and_belongs_to_many(HABTM)關聯的復選框時遇到了問題。我能夠找到有關如何在幾個不同的地方使其正常工作的信息,但認為記錄少數幾個是好的在StackOverflow上的一個地方使它正常工作所需的簡單步驟。

作為一個設置假設一個Kennel模型與HADTM關聯到Handler。

class Kennel
    has_and_belongs_to_many :handlers
end

這就是表單所需要做的全部內容:當有內置幫助程序時,不要手動執行此操作。

<%= form_for @kennel do |f| %>
  <%= f.collection_check_boxes(:handler_ids, Handler.all, :id, :to_s) %>
<% end %>

表單應該是這樣的:

<%= form_for(@kennel) do |form| %>
    ...
    <div class="field">
        <div class="field_head">Handlers</div>
        <%= hidden_field_tag("kennel[handler_ids][]", nil) %>
        <% Handler.order(:name).each do |handler| %>
            <label><%= check_box_tag("kennel[handler_ids][]", id, id.in?(@kennel.handlers.collect(&:id))) %> <%= handler.name %></label>
        <% end %>
    </div>
    ...
<% end %>

hidden_​​field_tag允許用戶取消選中所有框並成功刪除所有關聯。

控制器需要通過allowed_pa​​rams方法中的強參數允許參數:

params.permit(kennel: [:city, :state
    {handler_ids: []},
    :description, ...
    ])

參考文獻

has_and_belongs_to_many這種方式實現has_and_belongs_to_many關聯:

模型/角色

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

模型/用戶

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
end

用戶/ _form.html.erb

---
----
-----
 <div class="field">
        <% for role in Role.all %>
            <div>
                <%= check_box_tag "user[role_ids][]", role.id, @user.roles.include?(role) %>
                <%= role.name %>
            </div>
        <% end %>
    </div>

users_controller.rb

def user_params
    params.require(:user).permit(:name, :email, { role_ids:[] })
  end

中間table_name應該是roles_users ,應該有兩個字段:

  1. ROLE_ID
  2. 用戶身份

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM