0

メッセージの送信者が複数の受信者を選択できるように、チェックボックスを含む動的ドロップダウンを実装しようとしています。

現在、メッセージのテキストエリアの下に受信者のリストがあります。

_recipients.html.erb:

<% @recipients.each do |user| %>
  <label for="user<%= user.id %>" >
    <span class="list-group-item"><%= user.full_name %></span>
    <%= check_box_tag "message[user_tokens][]", user.id, @message.users.include?(user), id: "user#(user.id)", class: "form-control" %>
  </label>

ユーザー.rb:

class User < ActiveRecord::Base

  rolify
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  validates :full_name, presence:true,
            length: {minimum: 4 }

  has_many :messages, foreign_key: :sender_id
  has_many :notes
  has_many :homeworks
  has_many :hw_comments
  belongs_to :classmodule
  belongs_to :student

受信者.rb:

class Recipient < ActiveRecord::Base
    belongs_to :message
    belongs_to :user

    validates :user_id, presence: true
end

messages_controller.rb:

class MessagesController < ApplicationController
    before_action :authenticate_user!

    def new
        @message = Message.new
        @recipients = User.all 
        @recipients = @recipients.page(params[:page]).per(8)
    end

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

        if @message.save
            flash[:success] = "Message sent"
            redirect_to messages_path
        else
            flash[:alert] = "Something went wrong"
            render :new
        end
    end

    def index
        @messages = Recipient.where(:user_id => current_user.id).order('created_at DESC')
    end

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

たとえば、collection_select を使用してチェックボックスと名前をドロップダウンに入れることは可能ですか? 必要に応じて、より多くのコードを提供させていただきます。ありがとう。

4

2 に答える 2

0

ブートストラップを使用している場合は、ドロップダウンでこれを行うことができます。例を参照してください http://www.bootply.com/8V6EpWyMO3

(ただし、クリックがクリックされたものについてどれだけ敏感であるかについて、jsでいくつかの手動オーバーライドを検討するかもしれません)

レール部分に

単純なフォームを使用しておらず、ブートストラップ ソリューションが必要な場合は、カスタム入力を記述する必要があります。

于 2016-04-18T14:16:36.990 に答える