복붙노트

[RUBY-ON-RAILS] 4 레일 - has_and_belongs_to_many 협회에 대한 확인란

RUBY-ON-RAILS

4 레일 - has_and_belongs_to_many 협회에 대한 확인란

최근 4. 내가 어떻게 몇 가지 서로 다른 장소에서 제대로 작동하려면에 대한 정보를 찾을 수 있었다 레일에서 has_and_belongs_to_many (HABTM) 관계에 대한 작업에 체크 박스를 점점 문제가 있었다, 그러나 몇 가지를 문서화하는 좋은 것이라고 생각 필요한 간단한 단계는에 유래 여기에 한 곳에서 제대로 작동 얻을 수 있습니다.

셋업으로 처리기에 HABTM 협회와 개집의 모델을 가정합니다.

class Kennel
    has_and_belongs_to_many :handlers
end

해결법

  1. ==============================

    1.이것은 당신이 양식 할 필요있다 : A는 도우미에 내장있을 때 음주 수동으로 할 수 없습니다.

    이것은 당신이 양식 할 필요있다 : A는 도우미에 내장있을 때 음주 수동으로 할 수 없습니다.

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

    2.형태는 다음과 같이해야한다 :

    형태는 다음과 같이해야한다 :

    <%= 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는 사용자가 모든 상자의 선택을 취소하고 성공적으로 모든 연결을 제거 할 수 있습니다.

    제어기는 permitted_params 방법을 통해 강한 매개 변수를 허용해야 :

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

    참고 :

  3. ==============================

    3.나는 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해야하며, 두 개의 필드가 있어야합니다 :

  4. from https://stackoverflow.com/questions/21688200/rails-4-checkboxes-for-has-and-belongs-to-many-association by cc-by-sa and MIT license