我正在使用 bootstrap-sass gem在Rails 3.2.13中创建一个小应用程序。 我有以下情况:
我的'sign_up'控制器具有'index'动作,可以创建如下用户:
#sign_up controller
def index
@user = User.new
end
现在,在我的index.html.erb中,我有以下形式:
# sign_up controller => index.html.erb
<%= form_for @user, :html => {:class => 'form-horizontal'} do |f| %>
<div class = 'control-group'>
<%= f.label :username, :html => {:class => 'control-label'} %>
<%= text_field_tag :username, nil, :placeholder => 'Username' %>
</div>
<div class = 'control-group'>
<%= f.label :email, :html => {:class => 'control-label'} %>
<%= email_field_tag :email, nil, :placeholder => 'Email' %>
</div>
<div class = 'control-group'>
<%= f.label :password, :html => {:class => 'control-label'} %>
<%= password_field_tag :password, nil, :placeholder => 'Password' %>
</div>
<div class = 'control-group'>
<%= f.label :confirm_password, :html => {:class => 'control-label'} %>
<%= password_field_tag :confirm_password, nil, :placeholder => 'Confirm' %>
</div>
<%= f.submit 'Create', :class => 'btn btn-primary'%>
这将POST到users_controller,调用create action:
# users controller
def create
@user = User.new(params[:user])
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: @user.errors, status: :unprocessable_entity }
end
end
end
问题是:@user已保存,但参数丢失了! 在控制台日志中:
Started POST "/users" for 127.0.0.1 at 2013-05-29 12:14:47 -0300
UsersController处理#create as HTML 参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“wI5sNQV / lkn8GtYv5YkRLZ6HzxPg5MtoVXuarLulv30 =”,“username”=&gt;“nonickname”,“email”=&gt;“no@bar.com”, “password”=&gt;“[FILTERED]”,“confirm_password”=&gt;“[过滤]”,“提交”=&gt;“创建”} (0.1ms)开始交易 SQL(0.9ms)INSERT INTO“users”(“admin”,“created_at”,“email”,“password_hash”,“password_salt”,“updated_at”,“username”)VALUES(?,?,?,?,? ,?,?)[[“admin”,nil],[“created_at”,星期三,2013年5月29日15:14:47 UTC +00:00],[“email”,nil],[“password_hash”,nil ],[“password_salt”,nil],[“updated_at”,星期三,2013年5月29日15:14:47 UTC +00:00],[“username”,nil]] (148.9ms)提交交易......
为什么会这样,我该如何解决这个问题?我知道表单应该是users_controller域(我打算修复它),但它似乎不是问题!
感谢您的帮助!
答案 0 :(得分:1)
我会尽力帮助你。创建评论时,请查看控制台:
Started POST "/companies/1/comments" for 127.0.0.1 at 2013-05-29 20:06:02 +0300
Processing by CommentsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"+J+ewToARuBybidK79V/3cFdX6=", "comment"=>{"content"=>"Lorem ipsum..."}, "commit"=>"Add Comments", "company_id"=>"1"}
(0.1ms) BEGIN
SQL (0.2ms) INSERT INTO `comments` (`commentable_id`, `commentable_type`, `content`, `created_at`, `updated_at`, `user_id`) VALUES (1, 'Company', 'Lorem ipsum...', '2013-05-29 17:06:02', '2013-05-29 17:06:02', 2)
(42.7ms) COMMIT
现在,当我在conrtoller上说@comment = Comment.new(params[:comment])
意味着它会查找此行"comment"=>{"content"=>"Lorem ipsum dolor sit amet, ..."}
这意味着在我的情况下params [:comment]是内容,参数是作为哈希发送的,在你的情况下你必须有类似的东西:
"user"=>{authenticity_token"=>"wI5sNQV/lkn8GtYv5YkRLZ6Hzx=", "username"=>"nonickname", "email"=>"no@bar.com", "password"=>"[FILTERED]", "confirm_password"=>"[FILTERED]"}`
在控制台日志中。我在您的控制台日志中看了几次,但没有在那里看到用户,只要缺少@user = User.new(params[:user])
就不能打电话给他。
关于表单,如果您正在使用:
<%= form_for @user, :html => {:class => 'form-horizontal'} do |f| %>
您可以使用f
来构建字段并以此方式编写
<%= form_for @user, :html => {:class => 'form-horizontal'} do |f| %>
<div class = 'control-group'>
<%= f.label :username, :html => {:class => 'control-label'} %>
<%= f.text_field :username, :placeholder => 'Username' %>
</div>
<div class = 'control-group'>
<%= f.label :email, :html => {:class => 'control-label'} %>
<%= f.email_field :email, :placeholder => 'Email' %>
</div>
<div class = 'control-group'>
<%= f.label :password, :html => {:class => 'control-label'} %>
<%= f.password_field :passwor, :placeholder => 'Password' %>
</div>
<div class = 'control-group'>
<%= f.label :confirm_password, :html => {:class => 'control-label'} %>
<%= f.password_field :confirm_password, :placeholder => 'Confirm' %>
</div>
<%= f.submit 'Create', :class => 'btn btn-primary'%>
答案 1 :(得分:0)
好的,它已经解决了!
问题是引导形式,我需要设置名称属性:
...
<div class = 'control-group'>
<%= f.label :email, :html => {:class => 'control-label'} %>
<%= email_field_tag :email, nil, :name => 'user[email]', :placeholder => 'Email' %>
</div>
...
谢谢!