如何将自定义设计用户字段转换为其他控制器?

时间:2015-06-12 22:29:45

标签: ruby-on-rails devise

我有一个简单的应用程序,允许用户提交请求。它使用Devise来允许它们注册和验证。我想在'requests_controller.rb'中使用自定义Devise用户字段('first_name')

我可以从请求中获取值,代码如下:

@request = current_user.requests.new(request_params)
@userid = "#{@request[:user_id]}"
puts "@userid: #{@userid}"

这将输出Devise User:user_id(整数)。

但像这样的代码返回nil:

@name = "#{@request[:first_name]}"
puts "@name: #{@name}"

以下是我设置应用并添加自定义字段的方法:

我用

创建了我的用户模型
rails generate devise User

然后将迁移修改为如下所示:

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    create_table(:users) do |t|
      ## Database authenticatable
      t.string :email,              :null => false, :default => ""
      t.string :encrypted_password, :null => false, :default => ""

      ## Rememberable
      t.datetime :remember_created_at

      t.timestamps
    end

    add_index :users, :email,       :unique => true
  end
end

我的模型看起来像这样:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :rememberable, :validatable
end

我为用户创建了一个外键:

rails generate migration AddUserIdToRequest user_id:integer

最后将这两个模型与一对多关系联系起来:

has_many :requests

在app / models / user.rb

belongs_to :user

在app / models / request.rb

我有以下代码将自定义字段添加到设计用户(归功于Jaco Pretorius):

移植

class AddFieldsToUsers < ActiveRecord::Migration
   def change
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string
  end
end

浏览

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

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

registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController

  private

  def sign_up_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
  end

def account_update_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
  end
end

配置/ routes.rb中

devise_for :users, :controllers => { registrations: 'registrations' }

到目前为止一切顺利。此代码向Devise用户和新注册页面添加两个新字段。现在问我的问题。如何在另一个控制器中访问这些新字段?

1 个答案:

答案 0 :(得分:0)

尝试使用 <com.google.android.gms.ads.AdView android:id="@+id/ad_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" ads:adSize="BANNER" ads:adUnitId="ca-app-pub-6784520601040456/7994286128" /> 中的devise_parameter_sanitizer

application_controller

并设置before操作以使用

检查其是否为设备控制器
def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
end