第一次使用ROR,我正在尝试从表单提交的索引视图中创建一个新的模型对象。我想我弄清楚了,但我得到了:
uninitialized constant UsersController
在我看来,我有:
=form_for :user, :url => { :action => "new", :controller => "user" } do |f|
= f.text_field :username, :placeholder => 'Username', :size => 30
%br
= f.text_field :email, :placeholder => 'E-mail', :size => 30
%br
= f.password_field :password, :placeholder => 'Password', :size => 30
%br
%br
= f.submit_tag 'Sign Up'
在我的控制器中我有:
def new
user_info = :params[:user]
@user = User.create!(user_info)
flash[:notice] = "#{@user.username} has been added! Please fill out your profile page."
redirect_to user_path
end
谁能明白我为什么会这样?
答案 0 :(得分:1)
第一个问题是使用f.submit_tag
和form_for
帮助器。其他评论..
在Rails中执行此类表单时,您应该使用new
操作为表单设置空模型
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @user }
end
end
然后,表单将提交到create
操作,您可以在其中阅读params
并使用这些操作创建您将保存的用户对象
def create
@user = User.new(params[:post])
respond_to do |format|
if @user.save
format.html { redirect_to(@user, :notice => 'User was successfully created.') }
format.json { render :json => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.json { render :json => @post.errors, :status => :unprocessable_entity }
end
end
end
这里的respond_to
块允许您检查其他文件扩展名,通常是.json或.xml,并为您提供一种格式化每个扩展名的输出的方法。
对于show
操作,您可以拥有以下内容:
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @user }
end
end
然后转到/ users / 1你会看到你的视图被呈现(这是默认的,因此那里的空行带有注释#show.html.erb
你没有做任何事情,假设你有一个视图)< / p>
如果你去/users/1.json,你将得到@user.to_json
的结果,这对于从你的Javascript与Rails交谈很有用
关于未定义的常数问题:
检查您的UsersController是否缺少任何end
行
检查相关的用户模型和UsersController是否具有所有正确的命名约定,以免混淆Rails
users_controller.rb:
class UsersController < ApplicationController
...
end
user.rb:
class User < ActiveRecord::Base
...
end