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
进一步信息,请点击这里,这里和这里
归档时间: |
|
查看次数: |
6691 次 |
最近记录: |