2016-07-15 6 views
1

첫 번째 질문은 여기에 있습니다! 내 사용자에게 '핵심 회사'를 지정하려고합니다. 이는 many-to-many 리치 조인 테이블에 있습니다. 이 표에는 new, key, active 등과 같은 속성이 있습니다. 나는 회사를 긴 목록의 사용자에게 할당하고 그 사용자는 SimpleForm을 사용하려고합니다.부자 관계 속성을 기반으로 한 연결 제한

풍부한 관계에있는 특성을 기반으로 연관 관계를 필터링하고 제한하려는 것을 제외하면 모든 것이 작동합니다. 각 사용자에 대해 회사 관계가 있지만 모두가 key- 관계 또는 new- 관계입니다. 나는 단지 연관이 key 인 것을 보여주고 다른 것들은 만지지 않기를 바란다. 또한이 회사를 사용자에게 할당 할 때 activetrue으로 설정하려고합니다. 내 코드는 이제 다음과 같습니다

user.rb

class User < ActiveRecord::Base 
    has_many :company_user_relationships 
    has_many :companies, through: :company_user_relationships 

company.rb

class Company < ActiveRecord::Base 
    has_many :company_user_relationships 
    has_many :users, through: :company_user_relationships 

schema.rb

create_table "company_user_relationships", force: true do |t| 
    t.integer "company_id" 
    t.integer "user_id" 
    t.boolean "key" 
    t.boolean "active" 
    t.datetime "last_contacted" 
    t.string "status_comment" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "status" 
    t.boolean "new" 
end 

users_controller.rb

def assign_key_companies 
    User.update(params[:users].keys, params[:users].values) 
    redirect_to(:back) 
end 

보기 나는 기본적으로 만 기록을 갱신 할 때 항상 truekey -field을 넣어 user.companies.where(key: true)과 SQL COMMIT을 보여주고 싶은

= form_for :user_companies, 
     url: assign_key_companies_users_path, 
     html: {:method => :put} do |f| 
    - users.each do |user| 
    = simple_fields_for "users[]", user do |u| 
     tr 
     td.col-md-4 
      = "#{user.first_name} #{user.last_name}" 
     td.col-md-8 
      = u.association :companies, label: false, collection: @key_company_candidates, 
         input_html: {data: {placeholder: " Assign key companies"}, class: 'chosen-select'} 
    = submit_tag "Save key companies", class: "btn btn-success pull-right" 

.

내가 원하는 연결에만 영향을 미치도록 필터링하는 방법은 무엇입니까?

답변

0

나는 두 가지 방법을 생각할 수 있습니다. 협회 수준에서 필터링 할

먼저

class User < ActiveRecord::Base 
    has_many :company_user_relationships, -> { where("company_user_relationships.key" => true) } 

아니면 조건을 지정할 수 있도록

user.companies.where("company_user_relationships.key" => true) 

는 당신이 그것을 실제로 모두 세 개의 테이블 사이에 테이블을 조인하고 user.companies를 호출 할 때 어디 내보기처럼.

+0

고맙습니다! 키 관계 만 보여준 has_many 관계를 추가하는 방법을 찾았습니다. 첫 번째 예제와 비슷합니다. 레일 매직을 통해 질량을 지정할 때 자동으로 모든 속성을 자동으로 설정합니다. :) – feggak