2013-05-29 3 views
1

Я создаю небольшое приложение в Rails 3.2.13, используя bootstrap-sass gem. У меня следующая ситуация:рельсы параметры сообщения показать, но не вставлено

Мой «sign_up» контроллер имеет и «индекс» действие, которое создает пользователя, как это:

#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, вызывая создать действие:

# 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 # создать в HTML Параметры: { "utf8" => "✓", "authenticity_token" => "wI5sNQV/lkn8GtYv5YkRLZ6HzxPg5MtoVXuarLulv30 =", "имя пользователя" => «nonickname», «email» => «[email protected]», «password» => «[FILTERED]», «confirm_password» => «[FILTERED]», «commit» => «Create»} (0.1ms) начать транзакцию SQL (0.9ms) INSERT INTO «пользователи» («admin», «created_at», «email», «password_hash», «password_salt», «updated_at», «username») VALUES (?,? [? admin ", ноль], [" created_at ", ср, 29 мая 2013 15:14:47 UTC +00: 00], [" email ", nil], ["password_hash", nil], ["password_salt", nil], ["updated_at", ср, 29 мая 2013 15:14:47 UTC +00: 00], ["username", nil]] (148.9ms) совершить транзакцию ...

Почему это происходит, и как я могу это исправить? Я знаю, что форма должна быть доменом users_controller (я планирую это исправить), но это, похоже, не проблема!

Спасибо за помощь!

ответ

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 [: комментарий] в моем случае содержание параметры посылаются в виде хэша и в вашем случае, вы должны иметь что-то вроде:

"user"=>{authenticity_token"=>"wI5sNQV/lkn8GtYv5YkRLZ6Hzx=", "username"=>"nonickname", "email"=>"[email protected]", "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'%> 
+0

Хм ... я вижу. Спасибо, что показал мне это! – Fernando

+0

см. Обновление, как построить форму, используя f, не требуя пользователя для каждого поля при использовании field_tag ​​ – rmagnum2002

0

Хорошо, это решить!

Проблема была бутстраповская форма, мне нужно, чтобы установить имя атрибут:

... 
    <div class = 'control-group'> 
    <%= f.label :email, :html => {:class => 'control-label'} %>  
    <%= email_field_tag :email, nil, :name => 'user[email]', :placeholder => 'Email' %> 
</div> 
    ... 

Спасибо!

+0

Я думаю, вы должны иметь это как <% = email_field_tag: user,: email, nil,: placeholder => 'Email'%> without написав имя поля самостоятельно. – rmagnum2002

+0

Это дает мне исключение: неправильное количество аргументов (4 для 3) – Fernando

+0

извините, забыл удалить нуль <% = email_field_tag: user,: email,: placeholder => 'Email'%> – rmagnum2002

Смежные вопросы