我有一个简单的应用程序,允许用户提交请求。它使用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用户和新注册页面添加两个新字段。现在问我的问题。如何在另一个控制器中访问这些新字段?
答案 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