所以我有一个有趣的问题我正在努力。我试图在一个视图中创建相同模型的多个对象。我想在我的视图中显示所有可能的对象,复选框选择要创建的对象,然后提交并创建所有相应的对象。
现在要使用API请求获取要选择的对象并以JSON格式返回。然后,JSON将显示在视图上供用户选择,然后将包含所有选定对象的数组发送回控制器进行创建。
以下是我迄今为止尝试过的相关代码。
objects_controller.rb
def new
@possible_objects = <api call to get objs>
@objects = []
end
def create
params[:objects].each do |obj|
# create and save obj
end
end
对象/ new.html.erb
<% form_for @objects do |f| %>
<% @possible_objects.each do |api_obj| %>
<%= check_box_tag(api_obj["name"])%>
<%= api_obj["name"] %>
<% end %>
<%= f.submit %>
<% end %>
这绝对不是正确的方法,因为表单不会接受空数组作为参数。我不确定在哪里可以使用它,任何正确方向的指针都会很棒。谢谢。
感谢MrYoshiji指出我正确的方向,这就是最终的工作
objects_controller.rb
def
@possible_objects = <api call to get objs>
end
def create
params[:objects].each do |object|
new_obj = Object_Model.new( <params> )
new_obj.save
if !new_obj.save
redirect_to <path>, alert: new_obj.errors.full_messages and return
end
end
redirect_to <path>, notice: 'Successfully created.'
end
对象/ new.html.erb
<%= form_tag objects_path(method: :post) do %>
<% @possible_objects.each do |api_obj| %>
<%= check_box_tag 'objects[]', api_obj %>
<%= possible_object["name"] %>
<% end %>
<%= submit_tag 'Create'%>
<% end %>
答案 0 :(得分:4)
您可以尝试以下方法吗?
# view
<% form_tag my_objects_path(method: :post) do |f| %>
<% @possible_objects.each do |api_obj| %>
<%= check_box_tag 'objects[names][]', api_obj["name"] %>
<%= api_obj["name"] %>
<% end %>
<%= f.submit %>
<% end %>
# controller
def create
params[:objects][:names].each do |obj_name|
YourModelForObject.create(name: obj_name)
end
end
请参阅有关check_box_tag
的文档的评论:http://apidock.com/rails/ActionView/Helpers/FormTagHelper/check_box_tag#64-Pass-id-collections-with-check-box-tags