Rails 4 在同一页面上创建多个非嵌套模型
Multiple non-nested model creation on same page with Rails 4
我正在使用这个很好的答案:
在我的项目中:
_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"=>[{"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
params.permit(:user, array: [
:last_name,
:first_name,
])
发件人:
更新:
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
是你最好的朋友。
我正在使用这个很好的答案:
在我的项目中:
_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"=>[{"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
params.permit(:user, array: [
:last_name,
:first_name,
])
发件人:
更新:
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
是你最好的朋友。