我使用Devise设置了一个常规用户模块,但是随后我想向其中添加更多变量,并且遇到了麻烦。我按照本教程进行了以下更改:
我的routes
行devise
现在显示为:
devise_for :users, :controllers => { registrations: 'registrations' }
我的registrations_controller
是:
class RegistrationsController < Devise::RegistrationsController
private
def sign_up_params
params.require(:user).permit(:first_name, :last_name, :role, :gender, :dob, :age, :goal_weight, :goal_muscle, :goal_bodyimage, :goal_performance, :goal_endurance, :goal_health, :email, :password, :password_confirmation)
end
def account_update_params
params.require(:user).permit(:first_name, :last_name, :role, :gender, :dob, :age, :goal_weight, :goal_muscle, :goal_bodyimage, :goal_performance, :goal_endurance, :goal_health, :email, :password, :password_confirmation, :current_password)
end
end
我添加的字段我new
和edit
在其他风格的看法。
这是我的new
表格:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="field text-left">
<%= f.label :first_name %><br />
<%= f.text_field :first_name, autofocus: true, class: "form-control" %>
</div>
<div class="field text-left">
<%= f.label :last_name %><br />
<%= f.text_field :last_name, class: "form-control" %>
</div>
<div class="field text-left">
<%= f.label :gender %><br />
<%= f.select :gender, options_for_select([['Prefer Not to Say', 'Prefer Not to Say'],['Female', 'Female'],['Male', 'Male']]), {}, {class: "form-control"} %>
</div>
<div class="field text-left">
<%= f.label :dob %><br />
<%= f.date_field :dob, class: "form-control" %>
</div>
<div class="field text-left">
<%= f.label "What are your goals?" %><br />
<p><%= f.check_box :goal_weight, value: "1", checked: false, options: {} %> Lose Weight<br>
<%= f.check_box :goal_muscle, value: "1", checked: false, options: {} %> Gain Muscle<br>
<%= f.check_box :goal_bodyimage, value: "1", checked: false, options: {} %> Better Overall Body Composition<br>
<%= f.check_box :goal_performance, value: "1", checked: false, options: {} %> Increase Sports Performance<br>
<%= f.check_box :goal_endurance, value: "1", checked: false, options: {} %> Gain Endurance<br>
<%= f.check_box :goal_health, value: "1", checked: false, options: {} %> Better Health</p>
</div>
<div class="field text-left">
<%= f.label :email %><br />
<%= f.email_field :email, class: "form-control" %>
</div>
<div class="field text-left">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "off", class: "form-control" %>
</div>
<div class="field text-left">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %>
</div>
<div class="actions">
<%= f.submit "Sign up", class: "btn btn-primary" %>
</div>
<% end %>
这是我的edit
表格:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :first_name %><br />
<%= f.text_field :first_name, autofocus: true, class: "form-control" %>
</div>
<div class="field">
<%= f.label :last_name %><br />
<%= f.text_field :last_name, class: "form-control" %>
</div>
<div class="field">
<%= f.label :gender %><br />
<%= f.select :gender, options_for_select([['Prefer Not to Say', 'Prefer Not to Say'],['Female', 'Female'],['Male', 'Male']]), {}, {class: "form-control"} %>
</div>
<div class="field">
<%= f.label :dob %><br />
<%= f.date_field :dob, class: "form-control" %>
</div>
<div class="field">
<%= f.label "What are your goals?" %><br />
<p><%= f.check_box :goal_weight, value: "1", checked: false, options: {} %> Lose Weight<br>
<%= f.check_box :goal_muscle, value: "1", checked: false, options: {} %> Gain Muscle<br>
<%= f.check_box :goal_bodyimage, value: "1", checked: false, options: {} %> Better Overall Body Composition<br>
<%= f.check_box :goal_performance, value: "1", checked: false, options: {} %> Increase Sports Performance<br>
<%= f.check_box :goal_endurance, value: "1", checked: false, options: {} %> Gain Endurance<br>
<%= f.check_box :goal_health, value: "1", checked: false, options: {} %> Better Health</p>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, class: "form-control", autofocus: true %>
</div>
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
<% end %>
<div class="field">
<%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
<%= f.password_field :password, class: "form-control", autocomplete: "off" %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, class: "form-control", autocomplete: "off" %>
</div>
<div class="field">
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
<%= f.password_field :current_password, class: "form-control", autocomplete: "off" %>
</div>
<div class="actions">
<%= f.submit "Update My Info", class: "btn btn-primary" %>
</div>
<% end %>
所有表单均正确呈现。当我点击submit
或update
看到闪光灯时,通知您信息已成功保存。
当我保存信息时,我在服务器中得到了类似的信息,表明正在保存包括复选框值在内的新信息:
Started PUT "/users" for ::1 at 2016-06-03 17:17:42 -0700
Processing by RegistrationsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"DomUJ8aFghDIOPYsWQPlB7KnmFt27ZDcPOf7SdG4PWvI8QgI3OZP5mscbVfpGtlNpIZKTIqhL+RRwj1/3VT9AQ==", "user"=>{"first_name"=>"Test", "last_name"=>"Testerson", "gender"=>"Prefer Not to Say", "dob"=>"2008-08-08", "goal_weight"=>"0", "goal_muscle"=>"1", "goal_bodyimage"=>"0", "goal_performance"=>"1", "goal_endurance"=>"0", "goal_health"=>"0", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update My Info"}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 2]]
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 2]]
(0.1ms) begin transaction
SQL (0.4ms) UPDATE "users" SET "goal_weight" = ?, "goal_performance" = ?, "updated_at" = ? WHERE "users"."id" = ? [["goal_weight", 0], ["goal_performance", 1], ["updated_at", "2016-06-04 00:17:43.005855"], ["id", 2]]
(0.6ms) commit transaction
Redirected to http://localhost:3000/
Completed 302 Found in 148ms (ActiveRecord: 1.2ms)
这是麻烦开始的地方。之后,当我返回edit
页面时,所有新变量均显示在其字段中,但复选框除外(无论之前已检查了多少个/很少:
然后,当我在控制台中检查用户时,将不显示任何新变量:
irb(main):007:0> User.second
User Load (7.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 OFFSET 1
=> #<User id: 2, email: "[email protected]", encrypted_password: "$2a$11$y9/F8GQ9sTUK7Hm.b81Eo.VEbvvZ93XdOdZivAgQxhB...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2016-06-04 00:04:34", last_sign_in_at: "2016-06-04 00:04:34", current_sign_in_ip: "::1", last_sign_in_ip: "::1", created_at: "2016-06-04 00:04:34", updated_at: "2016-06-04 00:17:43">
在另一方面,我CAN使用ERB喜欢叫他们起来等地<%= @user.first_name %>
。
谁能帮我解决这个问题,以便保存所有新变量?
附加信息:
这是将新变量添加到user
模型的迁移:
class FlushOutUser < ActiveRecord::Migration
def change
add_column :users, :full_name, :string
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :role, :string
add_column :users, :gender, :string
add_column :users, :dob, :date
add_column :users, :age, :integer
add_column :users, :goal_weight, :integer
add_column :users, :goal_muscle, :integer
add_column :users, :goal_bodyimage, :integer
add_column :users, :goal_performance, :integer
add_column :users, :goal_endurance, :integer
add_column :users, :goal_health, :integer
end
end
从所有复选框中删除选中:false。这应该可以解决复选框问题。例如:
<%= f.check_box :goal_weight, value: "1", options: {} %> Lose Weight<br>
更新:users表确实具有自定义字段列-正如您在注释中提到的(但未在问题控制台输出中提及),...
在控制台输出中,用户末尾带有省略号()。这意味着还有更多字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句