活动模型MassAssignmentSecurity错误

Lia*_*ian 2 omniauth ruby-on-rails-3 ruby-on-rails-3.2

我遇到了一个错误:我正在开发一个带有Facebook集成的网络..我是ruby on rails的新手.你能解决我的问题吗?

ActiveModel::MassAssignmentSecurity::Error in SessionsController#create

Can't mass-assign protected attributes: name
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

class SessionsController < ApplicationController
  def create
    #render :json => request.env['omniauth.auth'].to_yaml
   auth = request.env['omniauth.auth']
    unless @auth = Authorization.find_from_hash(auth)
      @auth = Authorization.create_from_hash(auth, current_user)
    end

    self.current_user = @auth.user  
    render :text => "Welcome, #{current_user.name}."
   end
end
Run Code Online (Sandbox Code Playgroud)

这是我的用户模型:

class User < ActiveRecord::Base
  has_many :authorizations
  attr_accessor :name, :uid, :provider

  def self.create_from_hash!(hash)
    #create(:name => hash['user_info']['name'])
   create(:name => hash.info.name)
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的授权模式:

class Authorization < ActiveRecord::Base
  belongs_to :user
  validates_presence_of :user_id, :uid, :provider
  validates_uniqueness_of :uid, :scope => :provider

  def self.find_from_hash(hash)
    find_by_provider_and_uid(hash['provider'], hash['uid'])
  end

  def self.create_from_hash(hash, user = nil)
    user ||= User.create_from_hash!(hash)
    Authorization.create(:user => user, :uid => hash['uid'], :provider => hash['provider'])
  end
end
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题..在此先感谢:)

Bal*_*ick 11

您当然已启用了质量分配保护(config.active_record.whitelist_attributes = true在配置文件中),因此您需要明确指出哪些属性可以通过类似方法更新update_attributes.你这样做attr_accessible.

User模型中,替换以下行(似乎没用)

attr_accessor :name, :uid, :provider
Run Code Online (Sandbox Code Playgroud)

通过

attr_accessible :name, :uid, :provider
Run Code Online (Sandbox Code Playgroud)

请参阅相关的问题attr_accessor,并attr_accessible进一步信息,请点击这里,这里这里