使用Rails 4在同一页面上创建多个非嵌套模型

时间:2016-02-17 15:52:55

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord

我正在使用这个好答案:

https://stackoverflow.com/a/16920211/4412054

在我的项目中:

_form.html.erb

= form_tag({controller: "users", action: "create"}, remote: true) do
  %table
    %tr
      %td= text_field_tag 'user[][first_name]'
      %td= text_field_tag 'user[][last_name]'

    %tr.actions
      %td= submit_tag 'Save'
      %td= button_tag 'Add new user form', id: 'add_user_form'

    %tr.new_user_row.hidden # hidden class matches the css rule: {display:none;}
      %td= text_field_tag "user[][first_name]"
      %td= text_field_tag "user[][last_name]"

:javascript # jQuery
  $('#add_user_form').bind('click', function(e) {
    var row = $('tr.new_user_row').clone().removeClass('hidden new_user_row');
    $('tr.actions').before(row); # will append the <tr> before the actions
  });

UsersController

def create
  params[:user].each do |attr|
    User.create(attr)
  end
end

但是当我提交时,请给我这个错误:

ActiveModel::ForbiddenAttributesError

如果我在 config / application.rb 中通过strong_parameters禁用Rails 4 config.action_controller.permit_all_parameters = true,则可以正常运行并保存。

如何允许哈希

..., "user"=>[{"first_name"=>"Name", "last_name"=>"Last"}, {"first_name"=>"", "last_name"=>""}],....

在我的控制器中?

更新

如果我在Rails控制台中使用:

User.create({"first_name"=>"Name", "last_name"=>"Last"})

它有效!!!

更新2

在我的控制器中我有这个:

def users_params
  params.require(:user).permit(:user, array: [:first_name, :last_name])
end

1 个答案:

答案 0 :(得分:0)

params.permit(:user, array: [
  :last_name,
  :first_name,
])

来自:https://stackoverflow.com/a/30285592/484130

更新:

class FooController < ApplicationController

  def users_params
    params.permit(user: [:last_name, :first_name])["user"]
  end

  def some_action
    @users = Array.new

    users_params.each do |user_params|
      user = User.new user_params
      @users.push user if user.save
    end

    respond_to do |format|
      format.json { render json: @users }
    end
  end

  ....

end

这应该有用 抱歉没有自己测试..

BTW,gem byebug是你最好的朋友。