SimpleForm按钮集合不保存字段—RubyonRails



我在用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 %>

我做错了什么?

我很确定,在第一个示例(单选按钮)中,您将参数提交为:

params = {
  post: {
    category_id: 1
  }
}

而在第二个例子中(选择),您将参数提交为:

params = {
  category_id: 1
}

这是因为您的第一个示例在表单对象(即form.collection_radio_buttons)之外创建了单选标记,而第二个示例在其自身(即与form.select_tag相反的select_tag)上创建了选择标记

我建议按如下方式更新您的创建操作,并将您的form.collection_radio_buttons保持原样:

def create
  @post = Post.new(params.require(:post).permit(:title, :description, :category_id))
  # @post.category_id = params[:category_id] # remove this line
  ...
end

这基本上导致了一个更简单、更传统的表单/控制器设置,你可以在互联网上的例子中看到。

最新更新