我有一个包含不同列的“users”表。其中一列是username。我决定迁移这个列。在这样做之后,我试图通过注册表单(create action)创建一个新用户,但是得到了一个未定义的用户名方法错误,我不知道为什么。在@user.save上引发错误。
下面是相关代码,首先是用户控制器的操作,然后是提交的实际表单。
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to @user, notice: 'Thank you for registering!'
else
render :new
end
end
<%= form_for(@user) do |f| %>
<%= render "shared/errors", object: @user %>
<fieldset>
<ol>
<li class="required">
<%= f.label :name %>
<%= f.text_field :name, size: 40, autofocus: true %>
</li>
<li class="required">
<%= f.label :email %>
<%= f.email_field :email, size: 40 %>
</li>
<li class="required">
<%= f.label :password %>
<%= f.password_field :password, size: 40 %>
</li>
<li class="required">
<%= f.label :password_confirmation, "Confirm Password" %>
<%= f.password_field :password_confirmation, size: 40 %>
</li>
</ol>
<p>
<% if @user.new_record? %>
<%= f.submit "Create Account" %>
<% else %>
<%= f.submit "Update Account" %>
<% end %>
</p>
</fieldset>
<% end %>
有什么想法吗?堆栈跟踪,按要求:
active model(4.0.5)lib/active_model/attribute_methods.rb:439:in
method_missing'
activerecord (4.0.5) lib/active_record/attribute_methods.rb:167:in
method_missing'active model(4.0.5)lib/active_model/validator.rb:151:in
block in validate'
activemodel (4.0.5) lib/active_model/validator.rb:150:in
每个active model(4.0.5)lib/active_model/validator.rb:150:in
validate'
activerecord (4.0.5) lib/active_record/validations/presence.rb:5:in
validate'active support(4.0.5)lib/active_support/callbacks.rb:283:in
_callback_before_609'
activesupport (4.0.5) lib/active_support/callbacks.rb:447:in
_run_u3888567514204995588_uu validate_uu callbacks'active support(4.0.5)lib/active_support/callbacks.rb:80:in
run_callbacks'
activemodel (4.0.5) lib/active_model/validations.rb:373:in
run_validations!'active model(4.0.5)lib/active_model/validations/callbacks.rb:106:in
block in run_validations!'
activesupport (4.0.5) lib/active_support/callbacks.rb:373:in
u run_u 3888567514204995588_u validation_u callbacks'active support(4.0.5)lib/active_support/callbacks.rb:80:in
run_callbacks'
activemodel (4.0.5) lib/active_model/validations/callbacks.rb:106:in
run_validations!'active model(4.0.5)lib/active_model/validations.rb:314:in
valid?'
activerecord (4.0.5) lib/active_record/validations.rb:70:in
有效吗?活动记录(4.0.5)库/活动记录/验证。rb:77:in
perform_validations'
activerecord (4.0.5) lib/active_record/validations.rb:51:in
save'active record(4.0.5)lib/active_record/attribute_methods/dirty.rb:32:in
save'
activerecord (4.0.5) lib/active_record/transactions.rb:270:in
块(2级)in save'活动记录(4.0.5)lib/active_record/transactions.rb:330:in
block in with_transaction_returning_status'
activerecord (4.0.5) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in
block in transaction'active record(4.0.5)lib/active_record/connection_adapters/abstract/database_语句。rb:221:in
within_new_transaction'
activerecord (4.0.5) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in
事务活动记录(4.0.5)lib/active_record/transactions.rb:209:in
transaction'
activerecord (4.0.5) lib/active_record/transactions.rb:327:in
with_transaction_returning_status'active record(4.0.5)lib/active_record/transactions.rb:270:in
block in save'
activerecord (4.0.5) lib/active_record/transactions.rb:285:in
rollback_active_record_state!'active record(4.0.5)库/活动记录/事务。rb:269:in
save'
app/controllers/users_controller.rb:17:in
create'actionpack(4.0.5)库/动作控制器/金属/隐式渲染。rb:4:in
send_action'
actionpack (4.0.5) lib/abstract_controller/base.rb:189:in
过程动作'actionpack(4.0.5)lib/action_controller/metal/rendering.rb:10:in
process_action'
actionpack (4.0.5) lib/abstract_controller/callbacks.rb:18:in
block-in-process_action'active support(4.0.5)lib/active_support/callbacks.rb:403:in
_run__2040789553997201778__process_action__callbacks'
activesupport (4.0.5) lib/active_support/callbacks.rb:80:in
run_callbacks'actionpack(4.0.5)库/抽象控制器/回调。rb:17:in
process_action'
actionpack (4.0.5) lib/action_controller/metal/rescue.rb:29:in
process\u action'actionpack(4.0.5)lib/action_controller/metal/instrumentation.rb:31:in
block in process_action'
activesupport (4.0.5) lib/active_support/notifications.rb:159:in
block-in-instrument'active support(4.0.5)lib/active_support/notifications/instrumenter.rb:20:in
instrument'
activesupport (4.0.5) lib/active_support/notifications.rb:159:in
instrument'actionpack(4.0.5)库/动作控制器/金属/仪表。rb:30:in
process_action'
actionpack (4.0.5) lib/action_controller/metal/params_wrapper.rb:250:in
过程动作'active record(4.0.5)lib/active_record/railties/controller_runtime.rb:18:in
process_action'
actionpack (4.0.5) lib/abstract_controller/base.rb:136:in
进程'actionpack(4.0.5)库/抽象控制器/呈现。rb:44:in
process'
actionpack (4.0.5) lib/action_controller/metal.rb:195:in
dispatch'actionpack(4.0.5)lib/action_controller/metal/rack_delegation.rb:13:in
dispatch'
actionpack (4.0.5) lib/action_controller/metal.rb:231:in
block-in-action'actionpack(4.0.5)lib/action-dispatch/routing/route-set.rb:80:in
call'
actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:80:in
dispatch'actionpack(4.0.5)lib/action-dispatch/routing/route-set.rb:48:in
call'
actionpack (4.0.5) lib/action_dispatch/journey/router.rb:71:in
block-in-call'actionpack(4.0.5)库/action-dispatch/journey/router.rb:59:in
each'
actionpack (4.0.5) lib/action_dispatch/journey/router.rb:59:in
call'actionpack(4.0.5)lib/action-dispatch/routing/route-set.rb:674:in
call'
rack (1.5.2) lib/rack/etag.rb:23:in
call'机架(1.5.2)lib/rack/conditionalget.rb:35:in
call'
rack (1.5.2) lib/rack/head.rb:11:in
调用'actionpack(4.0.5)lib/action-dispatch/middleware/params-parser.rb:27:in
call'
actionpack (4.0.5) lib/action_dispatch/middleware/flash.rb:241:in
调用机架(1.5.2)lib/rack/session/abstract/id.rb:225:in
context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in
call'actionpack(4.0.5)lib/action-dispatch/middleware/cookies.rb:486:in
call'
activerecord (4.0.5) lib/active_record/query_cache.rb:36:in
call'active record(4.0.5)库/活动记录/连接适配器/抽象/连接池。rb:626:in
call'
activerecord (4.0.5) lib/active_record/migration.rb:373:in
call'actionpack(4.0.5)lib/action-dispatch/middleware/callbacks.rb:29:in
block in call'
activesupport (4.0.5) lib/active_support/callbacks.rb:373:in
\u run\uuu120944230734721513\uuuu callbacks'active support(4.0.5)lib/active_support/callbacks.rb:80:in
run_callbacks'
actionpack (4.0.5) lib/action_dispatch/middleware/callbacks.rb:27:in
call'actionpack(4.0.5)lib/action-dispatch/middleware/reloader.rb:64:in
call'
actionpack (4.0.5) lib/action_dispatch/middleware/remote_ip.rb:76:in
call'actionpack(4.0.5)lib/action_dispatch/middleware/debug_exceptions.rb:17:in
call'
actionpack (4.0.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in
call'railties(4.0.5)lib/rails/rack/logger.rb:38:in
call_app'
railties (4.0.5) lib/rails/rack/logger.rb:20:in
block-in-call'active support(4.0.5)lib/active_support/tagged_logging.rb:68:in
block in tagged'
activesupport (4.0.5) lib/active_support/tagged_logging.rb:26:in
tagged'active support(4.0.5)lib/active_support/taged_logging.rb:68:in
tagged'
railties (4.0.5) lib/rails/rack/logger.rb:20:in
call'actionpack(4.0.5)lib/action-dispatch/middleware/request-id.rb:21:in
call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in
call'机架(1.5.2)lib/rack/runtime.rb:17:in
call'
activesupport (4.0.5) lib/active_support/cache/strategy/local_cache.rb:83:in
call'机架(1.5.2)lib/rack/lock.rb:17:in
call'
actionpack (4.0.5) lib/action_dispatch/middleware/static.rb:64:in
call'机架(1.5.2)lib/rack/sendfile.rb:112:in
call'
railties (4.0.5) lib/rails/engine.rb:511:in
call'railties(4.0.5)lib/rails/application.rb:97:in
call'
rack (1.5.2) lib/rack/lock.rb:17:in
调用'机架(1.5.2)lib/机架/内容长度。rb:14:in
call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in
服务
最佳答案
读一下堆栈跟踪,它会告诉你出了什么问题。在你的User
课上看一眼。也许你有这样的东西:
validates_presence_of :username
或
validates :username, presence: true
关于ruby-on-rails - 注册时发生未定义的方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977182/