【问题标题】:Send Mutliple Select Array to Controller and Add Several Records向控制器发送多选数组并添加多条记录
【发布时间】:2018-02-19 12:15:14
【问题描述】:

我有一个template、一个useruser_templatesuser 有很多 templatesuser_templates

目前,每当创建一个新模板时,也会创建一个 user_template 记录。这与创建 1 条记录完美配合。

Template Create Controller:

def create
  @template = Template.new(template_params.merge(user: current_user))
  if @template.save
    save_user_templates(current_user.id, @template.id)
    redirect_to dashboard_url
  else
    render(:new)
  end
end

Save User Template function

def save_user_templates(user, template)
  UserTemplate.create(user_id: user, template_id: template)
end

现在我想实现一个“多选”,这样我就可以选择多个用户,单击保存,然后会立即为 user_template 表中的每个用户创建一条记录。

我的想法是将一个数组从视图传递给控制器​​,然后遍历该数组并在重定向之前保存每条记录。 问题是:我该怎么做?

【问题讨论】:

    标签: ruby-on-rails activerecord has-many-through multiple-select


    【解决方案1】:

    在尝试了各种方法后想出了一个解决方案。可惜没有及时看到回复。这就是我所做的。

    View

    .form-group.has-feedback
      .text-muted
        = f.label 'Which users should see this?'
      = f.collection_select :user_templates, User.all, :id, :name, { include_hidden: false }, multiple: 'true'
    

    Controller

    def create
      @template = Template.new(template_params.merge(user: current_user))
      if @template.save
        save_user_templates(params[:template][:user_templates], @template.id)
        redirect_to dashboard_url
      else
        render(:new)
      end
    end
    
    def save_user_templates(users, template)
      users.each do |user|
        puts user
        UserTemplate.create!(user_id: user, template_id: template)
      end
    end
    

    【讨论】:

      【解决方案2】:

      您可以遍历用户数组并对每个用户执行相同的操作。 def save_user_templates(user_id_array, template) user_id_array.each { |user_id| UserTemplate.create(user_id: user_id, template_id: template) } end

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-03
        • 2018-03-07
        • 1970-01-01
        • 2017-02-24
        • 2021-08-14
        • 2021-06-13
        相关资源
        最近更新 更多