删除组中的单个用户 - Active Record

Bit*_*ise 3 ruby activerecord ruby-on-rails

我有两个型号GroupPerson.两者都是HABTM,但我希望一个人能够在不删除该组的情况下退出特定组,而只是该组中的人.我一直在试图在控制台中解决这个问题,我似乎无法得到它.我将展示我的代码以便澄清.

我现在正在制作这种方法

def delete_from_group(phone_number)
 person = Person.find_by(phone_number: phone_number)
 person.groups.destroy
end
Run Code Online (Sandbox Code Playgroud)

这是我的控制器.

def create
# Grab the phone number from incoming Twilio params
@phone_number = params[:From]
# Find the subscriber associated with this number or create a new one
@subscriber = Person.find_or_create_by(phone_number: @phone_number)
@delete_group = Person.find_by(phone_number: @phone_number)

# Update location data
@subscriber.update(
  city: params[:FromCity],
  state: params[:FromState],
  zip: params[:FromZip],
  country: params[:FromCountry]
)

@body = params[:Body].to_s.downcase.strip
begin
  # Process the command from our Subscriber
  output = process_message(@body, @subscriber, @delete_group)
rescue
  output = "Something went wrong. Try again."
end

# Render the TwiML response

respond(output)
end

private

def process_message(message, subscriber, delete_group)
if worker_groups.include?(message)
  subscriber.update(subscribed: true)
  subscriber.add_to_group(message)
  "You have been subscribed to the #{message.capitalize} list"

elsif message == "stop volunteer"
  delete_group.delete_from_group("volunteer")
  "You have been unsubscribed from the specified list"
elsif message == "stop dancer"
  delete_group.delete_from_group("dancer")
  "You have been unsubscribed from dancer list"
elsif message == "stop staff"
  delete_group.delete_from_group("staff")
  "you have been unsubscribed from staff list"

elsif message == "tulip" || message == "stem"
  subscriber.update(subscribed: message == "tulip")
  subscriber.add_to_group("visitor")

  if subscriber.subscribed
    "You are now subscribed for updates."
  else
    "You have unsubscribed from notifications. Text 'TULIP' to start receieving updates again."
  end
else
  "Sorry, we don't recognize that command. Available commands are: 'TULIP' or 'STEM'."
end
end

def worker_groups
%w(dancer staff volunteer)
end

def worker_groups
 %w(dancer staff volunteer)
end
Run Code Online (Sandbox Code Playgroud)

jmk*_*oni 7

如果您要将组ID作为变量group_id删除:

 person = Person.find_by(phone_number: phone_number)
 group = person.groups.find(group_id)

 if group
    person.groups.delete(group)
 end
Run Code Online (Sandbox Code Playgroud)

看到关于这个主题的这篇精彩文章

另请参阅Rails文档:

collection.delete(object,...)通过从连接表中删除它们的关联,从集合中删除一个或多个对象.这不会破坏对象.