ruby-on-rails - 在表单 Rails 中创建多个对象

标签 ruby-on-rails json forms

所以我正在处理一个有趣的问题。我正在尝试在一个 View 中创建同一模型的多个对象。我想在我的 View 中显示所有可能的对象,复选框以选择要创建的对象,然后提交并创建所有相应的对象。

现在要选择的对象是使用 API 请求获取的,并以 JSON 格式返回。然后将 JSON 显示在 View 上供用户选择,然后将包含所有选定对象的数组发送回 Controller 以供创建。

这是我到目前为止尝试过的相关代码。

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

objects/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

objects/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 %>

最佳答案

您可以尝试以下操作吗?

# 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

关于ruby-on-rails - 在表单 Rails 中创建多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23791761/

相关文章:

javascript - UnlockField 在 CakePHP 中不起作用

javascript - 从 JSON 中删除 child 并生成只有 parent 的 JSON?

javascript - 强制 json_encode 在平面数组中创建数值字符串

forms - 打印表单的内容

jquery - 如何通过单击复选框的标签来发送数据

javascript - 如何从未命名的 JSON 对象数组中获取数据

javascript - 尝试在一个脚本中创建两个多项选择题

javascript - 是什么导致 Bootstrap 模式不停留在屏幕上?

ruby-on-rails - Rails form_tag 和 check_box_tag 数组,用于收集选定对象

ruby-on-rails - 在Ruby on Rails中引用当前用户