在表单Rails中创建多个对象

时间:2014-05-21 19:06:38

标签: ruby-on-rails json forms

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

现在要使用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 %>

1 个答案:

答案 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