gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:20:45 25 4
gpt4 key购买 nike

所以我正在处理一个有趣的问题。我正在尝试在一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com