Rails复选框不保存任何值

时间:2015-11-27 18:51:30

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

我是Rails的新手,我有这些复选框,可以很好地显示选项,但在提交表单时不会更改数据库中的任何内容。 视图中的表单包含以下代码:

<%= form_for(@sector) do |f| %>
  <%= f.collection_check_boxes :admins_id, Admin.all, :id, :name %>
<% end %>

这是扇区控制器中的相应操作:

def update
  @sector = Sector.find(params[:id])
  @sector.admins_id = params[:admins_id]

  respond_to do |format|
    if @sector.update(sector_params)
      format.html { redirect_to @sector, notice: 'Sector was successfully updated.' }
      format.json { render :show, status: :ok, location: @sector }
    else
      format.html { render :edit }
      format.json { render json: @sector.errors, status: :unprocessable_entity }
    end
  end
end
private
  def sector_params
    params.require(:sector).permit(:title, :admins_id)
  end

最后,我在模型中有这些关系:

class Sector < ActiveRecord::Base
  has_many :admins, dependent: :destroy
  validates :title, presence: true
  validates :title, uniqueness: true
end
class Admin < ActiveRecord::Base
  belongs_to :sector
end

另外,我可以在rails控制台中创建和分配管理员。

1 个答案:

答案 0 :(得分:1)

如果您要设置一个 admins_id ,那么您不需要复选框(将通过一系列ID)使用collection_radio_buttons(对于单个ID)。

但是,如果要通过has_many关联设置多个管理员,请保留复选框,但将属性名称更改为 admin_ids 。 (不要忘记更改permit()白名单中的名称。)

此外,您可以删除此行:

@sector.admins_id = params[:admins_id]

没有必要,因为它是通过update()设置的。