первый вопрос для меня здесь! Я пытаюсь назначить «ключевые компании» своим пользователям. Они находятся в таблице обогащенных соединений many-to-many
. На этой таблице есть такие атрибуты, как new
, key
, active
и так далее. Я хочу назначить компании пользователям в длинном списке, и для этого я использую SimpleForm
.Ограниченная ассоциация, основанная на атрибутах богатого отношения
Все работает за исключением того, что я хочу отфильтровать и ограничить связь ассоциации на основе атрибутов в отношении богатых. У меня есть отношения компании для каждого пользователя, но не все из них - это отношение key
или отношение new
. Я хочу, чтобы ассоциация была key
, чтобы отображать и не касаться других. Я также хочу установить атрибут active
на true
, когда я назначаю эти компании пользователям. Мой код будет выглядеть так:
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
вид
= 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"
Я в принципе хочу только показать user.companies.where(key: true)
и SQL COMMIT
всегда ставить key
-поле к true
при обновлении записи.
Как я могу отфильтровать, чтобы влиять только на ассоциации, которые я хочу?
Спасибо! Я нашел способ добавить еще одно отношение has_many, которое показывало только ключевые отношения, вроде первого примера, который вы показали. Через магию рельсов он автоматически установил все свойства для меня, когда я назначил их массе :) – feggak