【问题标题】:Rails checkbox not saving any valueRails复选框不保存任何值
【发布时间】:2015-11-27 18:51:29
【问题描述】:

我是 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 控制台中创建和分配管理员。

【问题讨论】:

  • 基于api.rubyonrails.org/classes/ActionView/Helpers/…,可以试试f.collection_check_boxes :admin_ids, Admin.all, :id, :name。注意它的ids 不是id
  • 也检查强参数问题:makandracards.com/makandra/…
  • 我认为您实际上没有收到:admins_id 的任何内容。从form_for 方法获得的参数是:sector,其中:admins_id 是嵌套的。试试params[:sector][:admins_id]
  • 以上都试过了。没有任何效果。感谢您的建议。
  • 那么你应该提供rails日志来记录当你尝试提交复选框@Haken时会发生什么

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


【解决方案1】:

如果您要设置单个 admins_id,则不需要复选框(将通过 id 数组),而是使用 collection_radio_buttons(用于单个 id)。

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

此外,您可以删除此行:

@sector.admins_id = params[:admins_id]

不需要,因为是通过update()设置的。

【讨论】:

  • 但我没有设置单个 admins_id,您也可以在模型中看到。不过还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多