我在使用simple_form构建的RoR应用程序中有一个输入表单。
其中一个输入字段是帖子的类别,实现为单选按钮的集合。保存输入时,此字段为空并且不保存。我找不到原因。
我的表格:
<%= simple_form_for @post do |form| %>
<%= form.collection_radio_buttons(:category_id, Category.all, :id, :name %>
<% end %>
我的模特:
def new
@post= Post.new
@categories = Category.all.map{|c| [ c.name, c.id ] }
end
def create
@post = Post.new(params.require(:post).permit(:title, :description))
@post.category_id = params[:category_id]
@categories = Category.all.map{|c| [ c.name, c.id ] }
...
...
end
奇怪的是,如果我使用可选择的下拉列表,一切正常:
<%= simple_form_for @post do |form| %>
<%= select_tag(:category_id, options_for_select(@categories, selected: @post.category_id)) %>
<% end %>
我做错了什么?
答案 0 :(得分:1)
我很确定在第一个示例(单选按钮)中,您将参数提交为:
params = {
post: {
category_id: 1
}
}
而在第二个示例(选择)中,您将参数提交为:
params = {
category_id: 1
}
这是因为您的第一个示例创建了表单对象的无线电标记(即form.collection_radio_buttons
),第二个示例创建了自己的选择标记(即select_tag
而不是{{1} }})
我建议您更新您的创建操作,如下所示,并保留form.collection_radio_buttons:
form.select_tag
这基本上会产生一种更简单,更传统的表单/控制器设置,您将在整个互联网上的示例中看到。