Rails 4中的未授权参数

14

我了解 collection_check_boxes,但不知道如何设置选中的值。 我有以下模型:

class Objective < ActiveRecord::Base

  has_many :indicators
  has_many :objective_children, class_name: "Objective", foreign_key: "parent_id"

  def objective_ids
    objective_children.collect{|o| o.id}
  end

  def objective_ids= objectives_ids
    objectives_ids.each do |id|
      objective_children << Objective.find(id)
    end
  end
end

编辑视图:

<%= form_for(@objective) do |f| %>
  <%= f.collection_check_boxes :objective_ids, Objective.all, :id, :name %>
  <%= f.submit %>
<% end %>

HTML 复选框没问题,但我不知道如何将值设置为 objective。我尝试过定义 objective_ids = objectives_ids 但没有任何效果。

在控制器中:

class ObjectivesController < ApplicationController
    def objective_params
      params.require(:objective).permit(:name, :code, :description, :objective_ids)
    end
end

编辑 日志文件显示未经许可的参数:perspective_id,objective_ids

2个回答

28

我解决了修改该行的问题。

params.require(:objective).permit(:name, :code, :description, :objective_ids)

params.require(:objective).permit(:name, :code, :description, :objective_ids => [])

1
它也可以写成.permit(:name, :code, :description, objective_ids: []) - user664833
只要你把 :objective_ids => [] 放在最后一个元素,这段代码就能正常工作。如果你把它放在其他符号之间,就会出现语法错误。那些看到语法错误的人,请把它放在最后一个元素,错误就会消失。 - Asad Shakil

3
我遇到了同样的问题,尝试使用以下代码:
params.require(:objective).permit(:name, :code, :description, :objective_ids => [])

但是不起作用,我改成:
params.require(:objective).permit(:name, :code, :description, {:objective_ids => []})

它能够正常工作!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接