【问题标题】:Implement multi select dropdown with nested attributes使用嵌套属性实现多选下拉菜单
【发布时间】:2017-08-29 14:19:45
【问题描述】:

我正在尝试实现多选下拉菜单,但我遇到了一些问题。

1) 在我的情况下,多个下拉菜单来了,我无法弄清楚

2)如果我编辑任何用户,他应该在多选下拉菜单中选择默认的所有标签。所有标签都应该出现,这样如果他想更新他的标签或更改他的标签,他就可以做到。

用户.rb

 class User
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable and :omniauthable
      include Mongoid::Document
      include Mongoid::Timestamps

     devise :database_authenticatable, :registerable,
            :recoverable, :rememberable, :trackable, :validatable, :confirmable#, :omniauthable, :omniauth_providers => [:facebook]


      has_many :tags,dependent: :destroy
      accepts_nested_attributes_for :tags,allow_destroy: true

    end

标签.rb

 class Tag
      include Mongoid::Document
      include Mongoid::Timestamps

       belongs_to :user

       field :name, :type => String

       field :created_at, :type => DateTime
       field :updated_at, :type => DateTime


    end

users_controller.rb

class UsersController < ApplicationController
    before_action :authenticate_user!


    def index
        @users = User.all - [User.find_by(status: true)]
    end


    def show
        @user = User.find(params[:id])   
    end

    def edit
        @user = User.find(params[:id])
    end


    def update
        @user = User.find(params[:id])
        if @user.update_attributes(user_params)
            redirect_to users_path      
        else
          render 'edit'
        end
    end

    private

        def user_params
          params.require(:user).permit(:first_name, tags_attributes: [:id, :name, :_destroy] )
        end


end

users/edit.html.erb

  <section class="content">
      <div class="row">
         <div class="col-md-3">
         </div>
        <div class="col-md-6">

          <div class="box box-warning">
            <div class="box-header with-border">
              <h3 class="box-title">Update User</h3>
            </div>

            <div class="box-body">
             <%= form_for @user do |f| %>

                <div class="form-group">
                  <label>First Name</label>
                 <%= f.text_field :first_name, :required => 'required',:class => 'form-control' %>
                </div>



                 <div class="form-group">
                  <label>Tags</label>
                    <%= f.fields_for :tags do |user_tag| %>



                      <%= user_tag.select :name, User.find_by(id: params[:id]).tags.collect{|tag| [tag.name,tag.id]} ,{:prompt => "--select state--"},:class => 'form-control',multiple: true %>

                    <% end %>
                </div>

                <div class="box-footer">
                   <%= f.submit 'Submit',class: 'btn btn-primary' %>
              </div>


             <%end %>
            </div>

          </div>

        </div>

      </div>

    </section>

【问题讨论】:

    标签: ruby-on-rails ruby mongodb ruby-on-rails-5 nested-attributes


    【解决方案1】:

    根据APIdoc

    给嵌套 fields_for 调用的块将被重复 集合中的每个实例

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 2017-03-06
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多