vendredi 15 juillet 2016

Limit association based on rich relation attributes

first question for me here! Im trying to assign 'key companies' to my users. These are found in a many-to-many rich join table. On this table there are attributes like new, key, active and so forth. I want to assign companies to users in a long list and for that Im using SimpleForm.

Everything is working excepts that I want to filter out and limit the association relation based on the attributes on the rich relation. I have company relations for each user but not all of them are akey-relation or a new-relation for example. I only want the association being key to show up and not touch the other ones. I also want to set the attribute active to true when Im assigning these companies to the users. My code looks like this now:

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

view

= 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"

I basically want to only show user.companies.where(key: true) and the SQLCOMMIT to always put the key-field to true when updating the record.

How can i filter out to only affect the associations I want?

Aucun commentaire:

Enregistrer un commentaire