2011-03-10 52 views
0

我被困在如何调试它。目前的行为是,当一个寄存器,它基本上创建了一个模型用户的新记录时,它应该创建记录。如何在rails中调试这个表单来创建一个新用户?

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

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

这里就是问题可能在于,在所述控制器和在新视图:

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 

这里是视图/新:

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 %> 

问题:什么是可能的失败领域,以及如何最好地使用调试器来解决问题?

顺便说一下:我在Rails 2.3.8上使用AuthLogic。

+0

你确实已经安装了ruby debug吗?你是否启用了启用调试的服务器? rails服务器--debugger – 2011-03-10 02:56:46

+1

窗体应该指向创建或更新,而不是新的 – DGM 2011-03-10 03:19:01

回答

4

形式URL(new_user_path)指向new行动UsersController,这就是为什么你的调试器甚至不运行(不走create动作)。

如果您在您的航线上使用resources :users,您可以omit the URL,它应该工作。

<% form_for @user do |f| %> 

它的工作原理的原因是,当它是一个新的用户对象,生成的URL将/usersPOST方法,它被翻译成的UsersControllercreate行动。如果上述不起作用,这肯定会起作用。

<% form_for @user, :url => users_path do |f| %> 
+0

@htanta是啊,似乎工作,不知道为什么我有这样的代码之前... – Angela 2011-03-11 20:23:05

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 

而且您认为应该使用:url => users_pathnew_user_path假设你的路线为创建行动,使用Rails的REST的资源格式制作。

编辑:第二个想到你完全可以不用:url => new_user_path选项,因为你使用form_for @user创建表单的方法,Rails很聪明,可以根据@user对象是否使用正确的路径是否是新对象。

相关问题