抱歉发布了一个经常被问到的问题,但是我已经辛苦工作了两天而没有接近。
我正在运行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
我被困在哪里,我应该尝试下一步。
答案 0 :(得分:0)
即使我确定我已经尝试过,但将模型更改为
def user_tokens=(ids)
self.user_ids = ids
end
修好了。我总是很难理解这一点符号,除非我花了4天时间试着为什么我的很多:很多模型都不起作用。 我想如果我这么做的话会更容易,而不仅仅是针对特定的系统管理员项目。