0

I posted a question similar to this before and it was suggested that I use friendlyIds gem however it was not for me as I had some real issues with it. Moving swiftly on...

I'm trying to create URL's where it points to whatever.com/first_name-second_name I've got that working but it does not account for when people sign up with the same name.

I found this code online and to me it seems pretty sound - my generate_slug method is within my user_controller but when ever I attempt to sign up to my app again I get the error;

NoMethodError in UsersController#create undefined method `user' for #

Here's the generate_slug method;

  def generate_slug
  if user(:slug => full_name.parameterize).count > 0
    n = 1
    while user(:slug => "#{full_name.parameterize}-#{n}").count > 0
      n += 1
    end
    self.slug= "#{full_name.parameterize}-#{n}"
  else
    self.slug = full_name.parameterize
  end
end

And heres the users#create;

  def create 
    user = User.find_by_email(params[:sessions][:email])
    if user && user.authenticate(params[:sessions][:password])
      if params[:remember_me]
        cookies.permanent[:auth_token] = user.auth_token
      else
        cookies[:auth_token] = user.auth_token
      end
      redirect_to users_show_path(current_user), notice: "Logged in"
    else
      flash.now.alert = "Email or password is invalid."
      render "new"
    end
  end

Can anyone see what's wrong with this? I've tried various things and hacking away at it but I'm very new to rails and not sure of what I'm doing wrong here.

Any help or pointers is much appreciated,

Thanks for your time!

Edit

1 - Here is the full trace;

activemodel (3.2.10) lib/active_model/attribute_methods.rb:407:in `method_missing'
activerecord (3.2.10) lib/active_record/attribute_methods.rb:149:in `method_missing'
app/models/user.rb:38:in `generate_slug'
activesupport (3.2.10) lib/active_support/callbacks.rb:418:in `_run__4251811508524484974__create__672836159521965693__callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.10) lib/active_support/callbacks.rb:385:in `_run_create_callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:81:in `run_callbacks'
activerecord (3.2.10) lib/active_record/callbacks.rb:268:in `create'
activerecord (3.2.10) lib/active_record/persistence.rb:348:in `create_or_update'
activerecord (3.2.10) lib/active_record/callbacks.rb:264:in `block in create_or_update'
activesupport (3.2.10) lib/active_support/callbacks.rb:403:in `_run__4251811508524484974__save__672836159521965693__callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.10) lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:81:in `run_callbacks'
activerecord (3.2.10) lib/active_record/callbacks.rb:264:in `create_or_update'
activerecord (3.2.10) lib/active_record/persistence.rb:84:in `save'
activerecord (3.2.10) lib/active_record/validations.rb:50:in `save'
activerecord (3.2.10) lib/active_record/attribute_methods/dirty.rb:22:in `save'
activerecord (3.2.10) lib/active_record/transactions.rb:259:in `block (2 levels) in save'
activerecord (3.2.10) lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'
activerecord (3.2.10) lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
activerecord (3.2.10) lib/active_record/transactions.rb:208:in `transaction'
activerecord (3.2.10) lib/active_record/transactions.rb:311:in `with_transaction_returning_status'
activerecord (3.2.10) lib/active_record/transactions.rb:259:in `block in save'
activerecord (3.2.10) lib/active_record/transactions.rb:270:in `rollback_active_record_state!'
activerecord (3.2.10) lib/active_record/transactions.rb:258:in `save'
app/controllers/users_controller.rb:10:in `create'
actionpack (3.2.10) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.10) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.10) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.2.10) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (3.2.10) lib/active_support/callbacks.rb:414:in `_run__1712494193629644471__process_action__997902979293854086__callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.10) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.10) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.2.10) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (3.2.10) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.2.10) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.10) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.10) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.10) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.2.10) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
activerecord (3.2.10) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (3.2.10) lib/abstract_controller/base.rb:121:in `process'
actionpack (3.2.10) lib/abstract_controller/rendering.rb:45:in `process'
actionpack (3.2.10) lib/action_controller/metal.rb:203:in `dispatch'
actionpack (3.2.10) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.2.10) lib/action_controller/metal.rb:246:in `block in action'
actionpack (3.2.10) lib/action_dispatch/routing/route_set.rb:73:in `call'
actionpack (3.2.10) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
actionpack (3.2.10) lib/action_dispatch/routing/route_set.rb:36:in `call'
journey (1.0.4) lib/journey/router.rb:68:in `block in call'
journey (1.0.4) lib/journey/router.rb:56:in `each'
journey (1.0.4) lib/journey/router.rb:56:in `call'
actionpack (3.2.10) lib/action_dispatch/routing/route_set.rb:601:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.4.3) lib/rack/etag.rb:23:in `call'
rack (1.4.3) lib/rack/conditionalget.rb:35:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.3) lib/rack/session/abstract/id.rb:210:in `context'
rack (1.4.3) lib/rack/session/abstract/id.rb:205:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/cookies.rb:341:in `call'
activerecord (3.2.10) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.10) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.10) lib/active_support/callbacks.rb:405:in `_run__4266248573959168775__call__672836159521965693__callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.10) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
activesupport (3.2.10) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.10) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/reloader.rb:65:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.10) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.10) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.10) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.10) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.3) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.3) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.10) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.3) lib/rack/lock.rb:15:in `call'
actionpack (3.2.10) lib/action_dispatch/middleware/static.rb:62:in `call'
railties (3.2.10) lib/rails/engine.rb:479:in `call'
railties (3.2.10) lib/rails/application.rb:223:in `call'
rack (1.4.3) lib/rack/content_length.rb:14:in `call'
railties (3.2.10) lib/rails/rack/log_tailer.rb:17:in `call'
rack (1.4.3) lib/rack/handler/webrick.rb:59:in `service'
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

2 - The generate_slug is being created in a before_create in the user model

3 - I was having some issues with that as well - it seems to be very temperamental - As you said I tried to change to user but that didn't work - however current_user doesn't work any more - I'll look into that just now

4 - No I'm not using an authentication gem - I'm just using this to try and learn some rails and the theory behind it so I'm trying to stay clear of gems :)

4

2 回答 2

0

user_id添加到slug中不是很容易吗?

def generate_slug
  "#{id}-#{full_name.parameterize}"
end
于 2013-01-11T12:58:46.907 回答
0

我们需要更多背景知识。

  1. 错误不完整。请向我们提供完整的跟踪。
  2. 从哪里generate_slug调用?在一个before_create模型用户?
  3. 您正在调用current_useronredirect_to方法create。为什么不是user您之前定义的变量?
  4. 您是否使用了身份验证 gem,例如 Devise 或 Clearance?
于 2013-01-11T03:42:55.260 回答