【问题标题】:Simple Form button collection does not save the field - Ruby on Rails简单表单按钮集合不保存字段 - Ruby on Rails
【发布时间】:2015-03-18 11:06:07
【问题描述】:

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

    params = {
      post: {
        category_id: 1
      }
    }
    

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

    params = {
      category_id: 1
    }
    

    这是因为您的第一个示例创建了表单对象的单选标记(即form.collection_radio_buttons),而第二个示例自己创建了选择标记(即select_tag,而不是form.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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多