Rails 4没有传递允许的参数

时间:2014-01-27 23:29:16

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

抱歉发布了一个经常被问到的问题,但是我已经辛苦工作了两天而没有接近。

我正在运行Rails 4.0.1(使用Devise,CanCan等),并拥有带有HABTM users_roles表的用户和角色模型(由自动删除的rolify创建)。

class Role < ActiveRecord::Base

  has_and_belongs_to_many :users, :join_table => :users_roles
  belongs_to :resource, :polymorphic => true

  attr_reader :user_tokens

  def user_tokens=(ids)
    self.user_ids = ids.split(",")
  end
end

我提交的表单数据是:

"role"=>{"name"=>"disabled", "resource_id"=>"", "resource_type"=>"Phone", "user_tokens"=>["", "3"]}

(不确定空字符串来自何处;它不在选项列表中,但是嘿,欢迎使用Rails)。

我的问题是将user_tokens数据传递给控制器​​中的相应变量。

有很多帖子表明格式正确(例如how to permit an array with strong parameters

如果我指定了允许的参数:

params.require(:role).permit(:name, :resource_id, :resource_type, :user_tokens => [] )

我收到“500内部服务器错误”而没有其他详细信息。

如果我将许可证指定为

params.require(:role).permit(:name, :resource_id, :resource_type, user_tokens: [] )

我没有收到任何错误(开发日志中没有未经许可的参数),但是@role中没有传递user_tokens数组。

如果我通过控制台运行此场景,我会得到:

params = ActionController::Parameters.new(:role => {:resource_id => "", :resource_type => "Phone", :user_tokens => ["", "3"]})
params.require(:role).permit(:name, :resource_id, :resource_type, user_tokens: [] )
=> {"resource_id"=>"", "resource_type"=>"Phone", "user_tokens"=>["", "3"]}
params.require(:role).permit(:user_tokens).permitted?
Unpermitted parameters: resource_id, resource_type, user_tokens
=> true

我被困在哪里,我应该尝试下一步。

1 个答案:

答案 0 :(得分:0)

即使我确定我已经尝试过,但将模型更改为

  def user_tokens=(ids)
    self.user_ids = ids
  end

修好了。我总是很难理解这一点符号,除非我花了4天时间试着为什么我的很多:很多模型都不起作用。 我想如果我这么做的话会更容易,而不仅仅是针对特定的系统管理员项目。