Kyl*_*dha 3 checkbox ruby-on-rails form-for ruby-on-rails-4
我正在铁轨中创建一个模拟"Chipotle订购应用程序",我很难用复选框提交不同类型的肉.我尝试使用'check_box'和'check_box_tag',在我的模型中使用了几个配置,但无济于事.
这是我的模型:
class Order
include Mongoid::Document
field :type, type: String
field :meat, type: Array
field :cheese, type: Mongoid::Boolean
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
这是我的控制器中的创建操作:
def create
@order = Order.new(order_params)
if @order.save
flash[:notice] = "Successfully submitted order!"
redirect_to action: 'index'
else
render action: 'new'
end
end
private
def order_params
params.require(:order).permit(:type, :meat, :cheese)
end
Run Code Online (Sandbox Code Playgroud)
以下是我认为的表格:
<%= form_for @order do |order| %>
<div>
<%= order.label :type %>:
<%= order.select :type, options_for_select(['Burrito', 'Taco', 'Quesadilla', 'Salad Bowl']) %>
</div>
<div>
<%= order.label :meat %>
<%= order.check_box :meat, {}, value='chicken'%>
<%= order.check_box :meat, {}, value='steak'%>
<%= order.check_box :meat, {}, value='tofu'%>
</div>
<div>
<%= order.label :cheese %>:
<%= order.check_box :cheese %>Yes
</div>
<div><%= order.submit %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
除了'meat'复选框之外的所有内容,如果我将'meat'模型中的字段类型从Array更改为String,我可以提交最后一个复选框的值...但是如果我尝试提交一个数组来自复选框,我收到错误'问题:类型字符串的值不能写入Array类型的字段'.
我在这个主题上看到的所有其他问题都建议在控制器中执行"tag_ids = params [:tag_ids]"的操作,但我不确定如何实现它.
在此先感谢您的帮助.
最终允许一切正常运行的代码如下.最后,我认为关键的区别在于控制器中的'meat:[]'.
模型:
class Order
include Mongoid::Document
field :type, type: String
field :meat, type: Array, default: []
field :cheese, type: Mongoid::Boolean
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
控制器:
def create
@order = Order.new(order_params)
if @order.save
redirect_to action: 'index'
flash[:notice] = "Successfully submitted order!"
else
render action: 'new'
end
end
private
def order_params
params.require(:order).permit(:type, :cheese, meat: [])
end
Run Code Online (Sandbox Code Playgroud)
并查看:
<%= form_for @order do |f| %>
<div>
<%= f.label :type %>:
<%= f.select :type, ['Burrito', 'Taco', 'Quesadilla', 'Salad Bowl'] %>
</div>
<div>
<%= f.label :meat %>
<%= check_box_tag 'order[meat][]', 'chicken', @order.meat.include?('chicken') %>
<%= check_box_tag 'order[meat][]', 'steak', @order.meat.include?('steak') %>
<%= check_box_tag 'order[meat][]', 'tofu', @order.meat.include?('tofu') %>
</div>
<div>
<%= f.label :cheese %>:
<%= f.check_box :cheese %>Yes
</div>
<div><%= f.submit %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人.
| 归档时间: |
|
| 查看次数: |
7315 次 |
| 最近记录: |