2015-07-09 62 views
2

我正在使用Devise和我的Rails 4.2应用程序,并且我拥有自定义用户控制器,而不是用于导航到用户#show路径中的配置文件页面。问题是,如果我打电话添加自定义属性以设计用户模型

@user.username 

它什么也没有返回,值为零。

路线:

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 

奇怪的是,我已经接种了默认的用户和他们的分贝:

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

我也通过application_controller做出的配置文件进行如下调整有权访问该方法。所以这让我相信这个表格有问题。但是果然,我已经启用了该领域,所以它不像我没有传递值。

色器件/注册/ new.html.erb

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

最后,我通过控制器沿着用户对象传递这样的:

def show 
    @user = User.find(params[:id]) 
    @posts = @user.posts.last(5) 
end 

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

我已经看过Devise的例子,但仍然没有看到发生了什么。

回答

0

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

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

+0

不,我不设置在模型中。这很奇怪,为什么种子用户有属性,但如果我创建它,则不会。 – user3162553

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