我正在使用Rails 4和Devise。 我试图在我的应用程序上发布的状态中显示用户的第一个名字。 我已经完成了我能想到的一切(添加用户模型后迁移的数据库)并且数据库仍然没有保存我的标题中列出的三个新字段,Devise保存了它附带的东西(电子邮件+密码)而不是新字段
这是我的user.rb:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible attributes for your model
attr_accessible :role_ids, :as => :admin
attr_accessible :email, :password, :password_confirmation, :remember_me,
:first_name, :last_name, :profile_name
end
我的数据库迁移:
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
t.string: :first_name;
t.string: :last_name;
t.string: :profile_name;
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
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
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
做了一些研究之后,我不认为attr_accessible与Rails 4和Devise兼容,这是正确的吗? 如果是这样,我如何将这些新信息传递到我的Devise数据库中? 有没有人知道这样做的好指南?
如果还有其他信息需要提供,请告诉我们!
提前致谢
答案 0 :(得分:9)
为你们的帮助人们干杯,这就是我如何让它发挥作用:
我将应用程序控制器更新为:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name,:last_name,:profile_name,:email, :password) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name,:last_name,:profile_name,:email, :password) }
end
end
并确保将user_id添加到状态控制器的底部:
params.require(:status).permit(:user_id, :name, :content)
这将保存数据库中的新字段,并允许它以状态显示。
答案 1 :(得分:1)
您需要将以下内容放在ApplicationController中。
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |params|
params.permit(
:email, :password, :password_confirmation, :first_name,
:last_name, :profile_name
)
}
devise_parameter_sanitizer.for(:account_update) { |params|
params.permit(
:email, :password, :password_confirmation, :first_name,
:last_name, :profile_name
)
}
end
答案 2 :(得分:0)
看看这个问题的答案:
User model won't update
如果ruby-on-rails-4
标记正确,则应记住
使用rails 4 attr_accessible不再使用,而是我们现在拥有 强烈的参与。
答案 3 :(得分:0)
1-如上所述,您需要使用强参数
2-我正在使用Rails&#39; 4.0.4&#39;并设计。几周前,他们试图更新到Rails 4.1.0。我使用设计时遇到了一些错误,所以我回到了rails 4.0.4版本。
皮埃尔