Search code examples
jqueryruby-on-rails-3formsselect2-rails

Submit a single form to same model with many User_id selected with select2 box in rails 3


I have a relationship with User and Micropost (User has_many Micropost and Micropost belongs_to User).

In a modal I have a form with select2 box in it. What I would like to do is, select as many users as I want and post a micropost to these users from a single form. How do I go about that.

Basically I would like to create microposts with user_ids of selected users in select2 box in one form submit..

Micropost table after post (Lets say I selected 4 users to post my message to)

micropost_id    micropost      user_id       posted_by_user_id
----------------------------------------------------------------------
1               Some Message       1         Current_user_id(say 5)   
2               Some Message       2         Current_user_id(say 5)    
3               Some Message       3         Current_user_id(say 5)   
4               Some Message       4         Current_user_id(say 5)  

Form

<form accept-charset="UTF-8" class="simple_form new_share" id="new_share" method="post">
<%= csrf_meta_tag %>
<div class="form-inputs">
    <select multiple id="UserSelect" style="width:100%">
        <%@users.each do |user| %>
            <option value="<%=user.id%>"><%=user.username%></option>
        <% end %>
    </select>             
    <div class="control-group text required">
        <div class="controls">
            <p> Enter your Custom Message </p>
            <textarea class="text required span4" id="review_text_area" 
                    name="review[review]" placeholder="Share" 
                    rows="3">
            </textarea>
        </div>
    </div> 
</div>
<div class="modal-footer">
    <button id="ShareModalSubmit" class="btn" type="submit" value="Share">Share</button>
    <button id="share-confirm-close" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>                        
</div>

I do not know, If I am making sense..

Is that even possible ? If not how do I achieve this feature?

Had been working all night..
Please bear with me, am a newb.


Solution

  • I managed to solve it by, this... not sure if its the cleanest solution. If anyone knows any clean solution , please let me know.

    def create
    respond_to do |format|
      format.js {
          if params[:Users_ids]  #Coming from select box
                univ_id = params[:univ_id]
                univ_name = params[:univ_name]
    
                params[:SelectedUsers_ids].each do |user_id|
                  @user = User.find(user_id.to_i)
                  params[:user_id] = user_id.to_i                                          
                  @micropost = @user.microposts.build(params[:micropost])
                  if @micropost.save
                    flash[:notice] = "We shared your message with the selected users"
                  else
                    flash[:error] = "Sorry! We could not share your message !"
                  end
                end
    
                return    
          else
              flash[:error] = "Sorry! We could not share your message !"
              redirect_to request.referer
              return
          end
       }
    
       format.html {    
          @user = User.find(params[:user_id].to_i)
          @micropost = @user.microposts.build(params[:micropost])
    
          if @micropost.save
            flash[:notice] = "We shared your message successfully!"
            redirect_to request.referer
          else
            flash[:error] = "Sorry! We could not share your message !"
            redirect_to request.referer
          end
        }
     end # end of respond to
    end