我被困在如何调试它。当前的行为是,当一个寄存器,它基本上是创建模型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。
答案 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对象是否是新对象。