Reputation: 3638
I have a field in an app that currently allows admins of Groups to invite other Users (to the group). It works for a single value, but I'm wondering how to adjust it so that it allows the admin to enter multiple Users separated by commas into the field.
# form in view
<%= form_tag({:controller => "group_members", :action => "invite_user"}, :method => "post") do %>
<%= hidden_field_tag 'group_id', @group.id%>
<%= text_field_tag :user_name %>
<%= submit_tag "Invite" %>
<% end %>
# group_members_controller
def invite_user
@user = User.find_by_user_name(params[:user_name])
@group_member = GroupMember.create!(:status=>"invited", :user_id=>@user.id, :group_id => params[:group_id], :token => SecureRandom.urlsafe_base64)
redirect_to :back, notice: "#{@user.user_name} has been invited to your group"
end
Upvotes: 1
Views: 1989
Reputation: 1002
You could let params[:user_name]
be a comma seperated list of users and parse it in invite_user:
@users = params[:user_name].split(/,\s*/).
This would split params[:user_name]
into an array, splitting on a comma followed by zero or more whitespace characters. Turning "Joe, John, Marry,Ann"
into ["Joe", "John", "Marry", "Ann"]
.
You could then do the following still in invite user:
@users.each do |username|
@user = User.find_by_user_name(params[username])
@group_member = GroupMember.create!(:status=>"invited", :user_id=>@user.id,
:group_id => params[:group_id],
:token => SecureRandom.urlsafe_base64)
end
redirect_to :back, notice: "my_message"
Upvotes: 0
Reputation: 5206
Try this:
<%= form_tag({:controller => "group_members", :action => "invite_users"}, :method => "post") do %>
<%= hidden_field_tag 'group_id', @group.id%>
<%= text_field_tag :users %>
<%= submit_tag "Invite" %>
<% end %>
# group_members_controller
def invite_users
user_names = params[:users].split(/,\s*/)
users = User.where(name: user_names)
group_id = params[:group_id]
@users.each do |user|
GroupMember.create!(:status=>"invited", :user_id=>user.id, :group_id => group_id, :token => SecureRandom.urlsafe_base64)
end
redirect_to :back, notice: "Users have been invited to your group"
end
Upvotes: 1