首页 > 解决方案 > 当我想要一个对象的 id 时,将 {", value= "=>"on"} 作为参数

问题描述

我有一个应该模拟交付 POS 的程序。Delivery Object 属于一个 Meal Object,它有_many 个项目。表单使用这样的辅助方法呈现一堆项目,每个项目旁边都有一个复选框......

#inside the app/models/item.rb file
def self.meal_field_maker(foods)
  rStr = ""
  foods.each do | sel |
    rStr += "<p><input type= 'checkbox' name= 'meal[items][], value= '#{sel.id}'> #{sel.show} </p>"
  end
  return rStr
end

#inside the app/helpers/application_helper.rb file
def the_new_meal_form
  foodgroups = Item.get_foodgroups #Gets each food group
  rStr = ""
  foodgroups.each do | sel |
   rStr+= "\n<h3>#{sel}</h3>"  #Adds the name of each Food Group as a header before checkboxes
   groupedFoods = Item.list_items_of_group(sel) #Gets every item of a food group
   rStr += Item.meal_field_maker(groupedFoods)  #makes a checkbox input tag for each item in groupedFoods
  end
  return (rStr)
end

这一切都以如下所示的形式正确呈现......

<form method= "post" action= "new_user_delivery">
    <input type= "hidden" name= "delivery[user]" value= <%= @user.id %> 
    <%= user_delivery_address_field(session).html_safe %>
    <p>(Optional) Meal Name: <input type= "text" name="delivery[meal][name]"></p>
    <p>----------------------------------------------------</p>
    <%= the_new_meal_form.html_safe %>
    <p>----------------------------------------------------</p>
    <p>Proceed to Payment <input type= "submit" value= "Proceed">
</form>

看起来一切都很完美,但是在下一个动作中,参数看起来像这样......

<ActionController::Parameters {"delivery"=>{"user"=>"11", "address"=>"98 Linden Ave", "meal"=>{"name"=>"FirstMeal"}}, "meal"=>{"items"=>[{", value= "=>"on"}, {", value= "=>"on"}, {", value= "=>"on"}, {", value= "=>"on"}, {", value= "=>"on"}]}, "controller"=>"deliveries", "action"=>"payment_options", "id"=>"11"} permitted: false>

这里的问题很明显,对于我选择的每个项目,我只得到 {", value= "=>"on"},这当然没有告诉我选择了哪些项目对象,正如你所见,这是 ~supposed ~返回项目的 ID 作为参数值。我该如何解决?

标签: ruby-on-railsformscheckboxparameters

解决方案


你的线路在这里:

rStr += "<p><input type= 'checkbox' name= 'meal[items][], value= '#{sel.id}'> #{sel.show} </p>"

之后缺少单引号'meal[items][]。还要确保等号后没有空格:

rStr += "<p><input type='checkbox' name='meal[items][]', value='#{sel.id}'> #{sel.show} </p>"

如果您的模型中有 HTML 构建代码,我会说这通常是一种代码气味。通常最好将它们保留在视图或助手中,但这超出了这个问题的范围。


推荐阅读