添加自定义属性以设计用户模型

时间:2015-07-09 20:23:23

标签: ruby-on-rails ruby devise

我正在使用Devise和我的Rails 4.2应用程序,我有自定义用户控制器,而不是用于导航到用户#show route中的个人资料页面。问题是,如果我打电话

query.each(function(user) {
    counter = counter+1;
    // you'll want to save your changes for each user,
    // therefore, you will need this
    return user.save();
}).then(function() {
    // Set the job's success status
    status.success("Counted all User Accounts.");
    // console.log inside the asynchronous scope
    console.log('Found '+counter+' users.');
}, function(error) {
    // Set the job's error status
    status.error("Failed to Count User Accounts.");
});

它什么都不返回,值为零。

路线:

@user.username 

我还通过application_controller对配置文件进行了以下调整:

devise_for :users 
resources :users, :only => [:show]

奇怪的是,我已经使用默认用户播放了数据库,并且他们可以访问该方法。所以这让我相信表格有问题。但果然,我已经启用了这个领域,所以它并不像我没有传递价值。

设计/注册/ new.html.erb

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email, :password,:username) }
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation,:username) }
  devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation,:username) }
end

最后,我通过控制器传递用户对象,如下所示:

<div class="field">
  <%= f.label :username %><br />
  <%= f.text_field :username, autofocus: true %>
</div>

最后一件事,如果我检查用户对象,它会显示有一个用户名方法,但值为nil。

我看过Devise的例子,但仍然没有得到正在发生的事情。

2 个答案:

答案 0 :(得分:1)

实际上非常简单的解决方案。需要使用之前的操作调用该方法:

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

 protected

   def configure_permitted_parameters
     devise_parameter_sanitizer.for(:sign_up) << :username
   end 
end  

这是在这里的文档:https://github.com/plataformatec/devise#strong-parameters

答案 1 :(得分:0)

您是否可以在用户模型中添加attr_accessor?

这可能会将您的值覆盖为零。