2013-05-07 51 views
1

我在应用中有一个字段,当前允许管理员组邀请其他用户(对组)。它适用于单个值,但我想知道如何调整它,以便它允许管理员输入多个用逗号分隔的字段。在Rails领域处理多个逗号分隔的值

# 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 
+0

是否使用自动完成或你正在写的使用ID? – cortex 2013-05-07 22:22:16

+0

正在编写user_name,很抱歉,text_field_tag应该命名为:user_name而不是:user_id – yellowreign 2013-05-07 22:24:05

+0

请考虑使用自动完成功能,因为很难正确写入所有名称。 – cortex 2013-05-07 22:33:45

回答

0

您可以让params[:user_name]是一个逗号分隔的用户列表,并在invite_user解析它:

@users = params[:user_name].split(/,\s*/). 

这将拆分params[:user_name]到一个数组,在一个逗号分割后跟零个或多个空白字符。将"Joe, John, Marry,Ann"转换为["Joe", "John", "Marry", "Ann"]

你可以然后执行以下操作还在邀请用户:

@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" 
1

试试这个:

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