【问题标题】:Multiple non-nested model creation on same page with Rails 4使用 Rails 4 在同一页面上创建多个非嵌套模型
【发布时间】:2016-02-17 15:52:54
【问题描述】:

我正在使用这个很好的答案:

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 中通过 config.action_controller.permit_all_parameters = true 禁用 Rails 4 strong_parameters,它可以工作并保存。

如何允许散列

..., "user"=&gt;[{"first_name"=&gt;"Name", "last_name"=&gt;"Last"}, {"first_name"=&gt;"", "last_name"=&gt;""}],....

在我的控制器中?

更新

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

User.create({"first_name"=&gt;"Name", "last_name"=&gt;"Last"})

有效!!!

更新 2

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

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

【问题讨论】:

  • 您当前允许的参数是什么?
  • 我尝试了任何方法,但没有任何反应!

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


【解决方案1】:
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

这应该可行。
很抱歉没有自己测试..

顺便说一句,gem byebug 是你最好的朋友。

【讨论】:

  • 没什么,再次:Completed 500 Internal Server Error in 129ms (ActiveRecord: 36.2ms) ActiveModel::ForbiddenAttributesError - ActiveModel::ForbiddenAttributesError: activemodel (4.2.5) lib/active_model/forbidden_attributes_protection.rb:21:in sanitize_for_mass_assignment' activerecord (4.2.5) lib/active_record/attribute_assignment.rb:33:in assign_attributes'
  • @JohnSam 我已经测试并更新了答案,抱歉之前我没有自己测试过。
  • 亲爱的@Francis.TM,我们又遇到了麻烦。和以前一样:ActiveModel::ForbiddenAttributesError - ActiveModel::ForbiddenAttributesError:
  • @JohnSam 我已经给出了我测试过的完整示例。
  • @JohnSam 您可以查看coffeepowered.net/2009/01/23/… 获取大量插入信息。
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多