Witam.
Mam pewien problem przy modyfikacji rejestracji w Devise. Otóż chciałem dodać 2 dodatkowe pola ‘firstname’ i ‘lastname’
Dodałem do application controllera
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :lastname) }
end
parametry niby się zgadają
Parameters: {"utf8"=>"✓", "authenticity_token"=>"qag+rQcgNQMws5Yom6AGwwtFbN2X1jmcYJGXmQgE95Q=", "user"=>{"firstname"=>"B", "lastname"=>"K", "email"=>"mail2@mail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
jednak firstname i lastname nie dodają się do bazy.
miałby ktoś pojęcie dlaczego tak się dzieje i jak to naprawić?
m1l05z
December 3, 2014, 10:54pm
2
A czy napewno masz taką migrację w folderze ‘/db/migrate’ ?
class AddFieldsToUsers < ActiveRecord::Migration
def change
add_column :users, :first_name, :string
add_column :users, :last_name, :string
end
end
innymi słowy czy dodałeś do tabeli users te dwa pola ?
thameth
December 3, 2014, 11:19pm
3
tak, dodałem
schema:
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "admin", default: false
t.string "firstname"
t.string "lastname"
end
m1l05z
December 4, 2014, 12:05am
4
spróbuj:
before_filter :configure_permitted_parameters, if: :devise_controller?
thameth
December 4, 2014, 12:29am
5
dalej nic, ponadto zauważyłem że z poziomu konsoli wartości też się nie chcą zapisać.
2.1.5 :005 > a.firstname = "ASD"
=> "ASD"
2.1.5 :006 > a.lastname = "ZXC"
=> "ZXC"
2.1.5 :007 > a.save
(0.5ms) BEGIN
(0.4ms) COMMIT
=> true
2.1.5 :008 > a
=> #<User id: 11, email: "mail3@mail.com",
...
04 00:24:02", updated_at: "2014-12-04 00:24:02", admin: false, firstname: nil, lastname: nil>
m1l05z
December 4, 2014, 12:45am
6
Trochę światła na tę sprawę rzuciłby Gemfile
thameth
December 4, 2014, 12:53am
7
source ‘https://rubygems.org ’
gem 'rails', '4.1.8'
gem 'pg'
gem 'draper'
gem 'decent_exposure'
gem 'decent_decoration'
gem 'devise'
gem 'simple_form', '~> 3.1.0rc'
gem 'bootstrap-sass', '~> 3.1.0'
gem 'haml-rails'
gem 'sass-rails', github: 'rails/sass-rails'
gem 'coffee-rails'
gem 'uglifier'
gem 'quiet_assets'
gem 'jquery-rails'
gem 'therubyracer', platforms: :ruby
gem 'travis'
gem 'ffaker'
gem 'konf'
group :development do
gem 'spring'
end
group :development, :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'shoulda-matchers'
gem 'pry'
end
group :test do
gem 'database_cleaner'
end
ruby '2.1.5'
Piszesz w pierwszym poście:
Mam pewien problem przy modyfikacji rejestracji w Devise.
i podajesz
thameth:
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :lastname) }
end
…czyli dodajesz pola firstname i lastname tylko dla akcji rejestracja.
Sądzę, że skoro nie działa “modyfikowanie” już istniejącej rejestracji, to brakuje jednej linijki kodu:
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:firstname, :lastname, :email, :password, :password_confirmation) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:firstname, :lastname, :email, :password, :password_confirmation, :current_password) }
end
thameth
December 4, 2014, 10:37am
9
ale to chyba nie wyjaśnia dlaczego nie mogę z konsoli modyfikować tych pól?
m1l05z
December 4, 2014, 10:42am
10
a to nie jest tak że on widzi że nie ma admin
…
np. schema
ActiveRecord::Schema.define(version: 20141204071210) do
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
t.string "first_name"
t.string "last_name"
end
. application controller - bez:name
nie widzisz :first_name
i :last_name
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
end
a jak dodam :name
działa poprawnie
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :name, :email, :password, :password_confirmation) }
end
thameth
December 4, 2014, 10:51am
11
udało mi się znaleźć problem.
okazało się że w modelu miałem
attr_accessor :firstname, :lastname
co blokowało modyfikowanie tych pól