【问题标题】:CanCan, Rails 4, UnknownAttribute error on virtual attributesCanCan,Rails 4,虚拟属性上的 UnknownAttribute 错误
【发布时间】:2013-09-25 20:49:36
【问题描述】:

我在搞清楚如何在创建新记录期间通过 CanCan 获取虚拟属性:

我有团队,有 :name 和 :description

团队通过成员资格拥有用户,我通过单独的控制器操作进行控制,并将数据保存在我称为“member_selections”的参数中,其中包含具有非特定键(user_id => 角色)的哈希。

因此:我的 params 哈希可能如下所示:

params[:team] = {name: "Super Team", description: "It is super", 
member_selections: {"1"=>"member", "2"=>"leader"}}

我对强参数有常用的 CanCan 解决方案,如下所示: https://github.com/ryanb/cancan/issues/835

为了通过白名单穿透虚拟属性,我使用了这里提到的技术,在底部: http://blog.sensible.io/2013/08/17/strong-parameters-by-example.html

具体来说,我的“team_params”方法如下所示:

def team_params
  params.require(:team).permit(:name, :description).tap do |whitelist|
    whitelist[:member_selection] = params[:team][:member_selection]
  end
end

现在,如果我删除 .tap 和白名单阻止,我可以创建新团队,但不能添加新成员。

如果我保持 .tap,我可以添加新成员,但我无法创建新团队。提交“新”表单会产生以下结果:

ActiveRecord::UnknownAttributeError in TeamsController#create
unknown attribute: member_selection 

它甚至在正确调用 TeamsController#create 方法之前就给出了这个错误,所以这不是我将参数错误地传递给 Team.new/.create 的问题,并表明这是一个 CanCan 问题。

还有其他人在 Rails 4 中遇到虚拟属性和 CanCan 的问题吗?我该如何解决这个问题?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 cancan strong-parameters virtual-attribute


    【解决方案1】:

    我认为您需要将 attr_accessor 添加到您的团队模型中

    attr_accessor :member_selection
    

    【讨论】:

    • 一如既往地简单。现在一切都按预期工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多