rspecを使用してTDDでRailsアプリケーションを作成しています。私は削除することができないエラーを取得しています:ここでRailsとRspec - 保護された属性を一括割り当てできません
Failure/Error: invalid_user = User.new(@attr.merge("provider" => ""))
ActiveModel::MassAssignmentSecurity::Error:
Can't mass-assign protected attributes: uid, info
は私のユーザーの仕様です:
user_spec.rb
require 'spec_helper'
describe User do
before(:each) do
@attr = {"provider" => "providerexample", "uid" => "uidexample", "info" => {"name" => "Example"}}
end
it "should create a new instance given valid attributes" do
user = User.create_with_omniauth(@attr)
end
it "should require a provider" do
invalid_user = User.new(@attr.merge("provider" => ""))
invalid_user.should_not be_valid
end
it "should require a uid" do
invalid_user = User.new(@attr.merge("uid" => ""))
invalid_user.should_not be_valid
end
end
そして、私のuser.rb
class User < ActiveRecord::Base
attr_accessible :name, :credits, :email, :provider
validates :name, :provider, :uid, :presence => true
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["info"]["name"]
end
end
エンド
uid
とinfo
をattr_accessible
に追加してmass-assign
エラーをデバッグすると、次のエラーが表示されます。unknown attribute: info
@attrではこれが何ですか? '' info "=> {" name "=>"例 "}' –
あなたは正しいです、それはそこに行かないでください。物事は '' create_with_omniauth'に '' auth ["info"] 'を渡す必要があります。どうやってやるの? –
どちらの場合でもうまくいくはずの回答を作成しました。 –