如何在rails中调试此表单以创建新用户?

时间:2011-03-10 02:46:16

标签: ruby-on-rails

我被困在如何调试它。当前的行为是,当一个寄存器,它基本上是创建模型User的新记录时,它应该创建记录。

它只是回到相同的用户/新视图而不创建它。我在控制台中看不到任何有趣或有用的东西。

我想使用调试器,但正如我所说,没有什么是有用的。

问题出在哪里,在控制器和新视图中:

users_controller.rb

6   def new
  7     @user = User.new
  8   end
  9   
 10   def create
 11     @user = User.new(params[:user])
 12     debugger
 13     
 14     @user.save do |result|
 15       debugger  
 16       if result
 17         flash[:notice] = "Account registered!"
 18         redirect_back_or_default account_url
 19       else
 20         render :action => :new
 21       end
 22       
 23     end
 24   end

这是view / new:

1 <h1>Register</h1>
  2   
  3 <% form_for @user, :url => new_user_path do |f| %>
  4   <%= f.error_messages %>
  5   <%= render :partial => "form", :object => f %>
  6   <%= f.submit "Register" %>
  7 <% end %> 

问题:可能出现的失败方面是什么?我怎样才能最好地使用调试器来解决这个问题?

BTW:我在Rails 2.3.8上使用AuthLogic。

2 个答案:

答案 0 :(得分:4)

表单网址(new_user_path)指向new的{​​{1}}操作,这就是您的调试器甚至无法运行的原因(它不是UsersController行动)。

如果您在路线上使用create,则omit the URL可以正常使用。

resources :users

它的工作原理是,当它是新的用户对象时,生成的网址将为<% form_for @user do |f| %> /users方法,该方法会转换为POST create行为}。如果上述方法不起作用,那肯定会有效。

UsersController

答案 1 :(得分:0)

我无法找到任何版本的save的文档,你能告诉我这个定义的位置吗?或者将控制器逻辑更改为:

def new
  @user = User.new
end

def create
  @user = User.new(params[:user])

  if @user.save
    flash[:notice] = "Account registered!"
    redirect_back_or_default account_url
  else
    render :action => :new
  end
end

假设您使用Rails的RESTful资源格式创建了创建操作的路由,那么您的视图应该使用:url => users_path而不是new_user_path

编辑:第二个想法你可能完全取消:url => new_user_path选项,因为你正在使用创建表单的form_for @user方法,Rails足够聪明,可以使用基于的正确路径@user对象是否是新对象。