简体   繁体   中英

recipient checklist with text_area form

I am working on implementing a form where a user can compose a message and choose multiple recipients from a checklist in the same form.

I have already built and tested the messaging system which is working but now I want to create the proper form for my desired functionality.

When I use a multipart select form it works fine and looks like this.

<%= form_for @message do |f| %>
  <div class="modal-body">

    <%= f.text_area :body, class: "form-control"%>

  </div>
  <!-- displays the current users frinds their following -->
  <%= f.select :user_tokens, @user.collect {|x| [x.name, x.id]}, {}, :multiple => true, class: "form-control" %>
  <br>

  <div class="modal-footer">
    <%= f.button :submit, class: "btn btn-primary" %>
  </div>

<% end %>

But I want to instead display the users in a checklist, this is what I have so far which displays everything with no errors, but dosent send messages.

<div class="results">
<%= form_tag new_message_path, method: 'get' do %>

    <div class="modal-body">

        <%= text_area :body, class: "form-control"%>

    </div>
        <table class="table-bordered">
            <thead>
                <tr>
                    <td class="col-md-1">Select</td>
                    <td class="col-md-1">User</td>
                </tr>
            </thead>
            <% @user.each do |user| %>
                <tbody>
                    <tr>
                          <td><%= radio_button_tag :user_tokens, user.id %></td>
                          <td><%= user.name %></td>
                    </tr>
                </tbody>
            <% end %>
        </table>
        <%= submit_tag "Send Message", :name => nil, class: "btn btn-primary" %>
    </div>

<% end %>
</div>

Here is my controller

class MessagesController < ApplicationController
before_action :authenticate_user!

def new
    @message = Message.new
    @user = current_user.following
    @users = User.all
end

def create
    @message = current_user.messages.build(message_params)

    if @message.save
        flash[:success] = "Message Sent!"
        redirect_to messages_path
    else
        flash[:notice] = "Oops!"
        render 'new'
    end
end

def index
    @user = User.find(current_user)
    @messages = Recipient.where(:user_id => @user).order("created_at DESC")

end

private

    def message_params
        params.require(:message).permit(:body, :sender_id, user_tokens: [])
    end
end

My question is what is the best way to get this functionality?

Let me know if you need to see any other info, thanks.

I ended up figuring it out Thanks to this previous post I found, rails 3 has_many :through Form with checkboxes .

<%= form_for @message do |f| %>
<%= f.text_field :body %>
<p>
   <% @user.each do |user| %>
        <div>
        <%= check_box_tag "message[user_tokens][]", user.id, @message.users.include?(user) %>
        <%= user.name %>
    </div>
   <% end %>
</p>
<p><%= f.submit %></p>
<% end %>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM