erste Frage für mich hier! Ich versuche meinen Kunden "Schlüsselunternehmen" zuzuweisen. Diese werden in einer Rich-Join-Tabelle many-to-many
gefunden. Auf dieser Tabelle befinden sich Attribute wie new
, key
, active
und so weiter. Ich möchte Unternehmen zu Benutzern in einer langen Liste zuweisen und dafür mit SimpleForm
.Begrenzen der Assoziation basierend auf Rich Relationship-Attributen
Alles funktioniert, ausgenommen, dass ich herausfiltern und die Assoziationsbeziehung basierend auf den Attributen auf der Rich-Beziehung begrenzen möchte. Ich habe Firmenbeziehungen für jeden Benutzer, aber nicht alle von ihnen sind eine key
-Beziehung oder eine new
-Beziehung zum Beispiel. Ich möchte nur, dass die Verbindung key
angezeigt wird und nicht die anderen berühren. Ich möchte auch das Attribut active
zu true
setzen, wenn ich diese Firmen den Benutzern zuordne. Mein Code sieht wie folgt nun:
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
Ansicht
= 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"
ich im Grunde nur user.companies.where(key: true)
und die SQL-COMMIT
immer die key
-field zu true
zeigen will, setzen, wenn die Aufzeichnung zu aktualisieren.
Wie kann ich herausfiltern, um nur die Vereinigungen zu beeinflussen, die ich will?
Vielen Dank! Ich habe eine Möglichkeit gefunden, eine weitere has_many-Beziehung hinzuzufügen, die nur Schlüsselbeziehungen zeigt, ähnlich wie das erste Beispiel, das Sie gezeigt haben. Durch rails magic stellt es dann automatisch alle Eigenschaften für mich her, wenn ich sie massenweise zugewiesen habe :) – feggak