Simple Form按钮集合不保存字段 - Ruby on Rails

时间:2015-03-17 23:41:15

标签: ruby-on-rails ruby ruby-on-rails-4

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

我做错了什么?

1 个答案:

答案 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

这基本上会产生一种更简单,更传统的表单/控制器设置,您将在整个互联网上的示例中看到。