2009-12-23 3 views
1

Я создал новую миграцию:Rails: Новая миграция, а ноль в контроллере

class AddSignatureToUser < ActiveRecord::Migration 
    def self.up 
    add_column :users, :signature, :text 
    end 

    def self.down 
    remove_column :users, :signature 
    end 
end 

Теперь мой usertable имеет новый столбец с именем подписи. На моей странице редактирования я писал:

<h1>Editing user</h1> 
<% form_for(@user) do |f| %> 



    <%= f.error_messages %> 
    <div class="form-wrapper"> 
    <p> 
     <label for="email">Email</label> 
     <%= f.text_field :email %> 
    </p> 
    <p> 
     <label for="user_signature">Signature</label> 
     <%= f.text_area(:signature, :value => @user.signature) %> 
    </p> 
    <div class="form-submit"> 
     <%= f.submit 'Update', :class => "form-submit-button" %> 
    </div> 

    </div> 


<% end %> 

Но это не будет работать. В моем контроллере я всегда получаю значение nil как значение для подписи. Любые идеи почему?

def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     puts @user.signature #always nil 
     flash[:notice] = 'User was successfully updated.' 
     format.html { redirect_to(@user) } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

ответ

1

Хорошо, я нашел ошибку! В моей модели пользователя, у меня была

attr_accessible :login, :email, :password, :password_confirmation 

Я добавил: подпись, и теперь он работает!

attr_accessible :login, :email, :password, :password_confirmation, :signature 
0

Просто, чтобы быть уверенным, вы запустили rake db:migrate запустить миграцию, да?

+0

да, я побежал грабли БД: мигрировать и столбец существует в моей базе данных (выберите подпись от пользователей;) – Newbie

1

Проверьте, чтобы убедиться, что вы запускали миграцию для надлежащей среды (разработка, производство)

RAILS_ENV=development rake db:migrate 

Это значение по умолчанию, но вы можете быть настройки среды где-то. Я думаю, вы бы получили метод, который не нашел ошибку, если бы вы этого не сделали, но просто убедитесь, что раньше я был горячим.

Далее, если вы используете дворняга/WEBrick, попробуйте использовать отладчик, запустив сервер с:

./script/server --debugger --environment=development 

, а затем в контроллере:

respond_to do |format| 
     debugger 
     if @user.update_attributes(params[:user]) 
     puts @user.signature #always nil 
    ... 

и проверить, что params здесь, в частности params [: user] [: signature], убедитесь, что он правильно передан.

Наконец, по мнению, все, что вам нужно:

<%= f.label :signature %> 
    <%= f.text_area :signature %> 

значение уже будет текущее значение, так как вы вызываете форму на @user в form_for. Явная установка: значение может быть мешая где

+0

Ну, я мигрировал в mirgration в свою базу данных и столбец уже существует. Я пробовал написать <% = f.label: подпись%> <% = f.text_area: подпись%> без каких-либо успехов.Но я думаю, что это не имеет значения, погода я пишу <метку = "user_signature"> Подпись <% = f.text_area (: подпись,: значение => @ user.signature)%> или < % = f.label: подпись%> <% = f.text_area: подпись%> Право? Мне нужно что-то написать в моей модели пользователя? Я так не думаю, но вы никогда не знаете ... Я новичок в рельсах, извините. – Newbie

+0

Используете ли вы более новую версию Rails (2.3.x)? Вам не нужно ничего писать в вашей модели пользователя, activerecord автоматически настраивает эти методы. –

+0

Да, я использую V2.3.2 и Netbeans как IDE. – Newbie

1

Два быстрых вопросы-

  1. Почему мы смотрим edit.html.erb и обновлять здесь? Вы уже создали эту запись с помощью new.html.erb и создали?

  2. Почему у вас <%= f.text_area(:signature, :value => @user.signature) %> вместо просто <%= f.text_area :signature %>

+0

1. Да, мой пользователь создан в регистрационной форме (users/new.html.erb) 2. Теперь я использую <% = f.text_area: signature%>, но это не будет работать в конце концов. – Newbie

+0

Что вы получаете, если ваша попытка помещает параметры в ваш контроллер? [: User] [: signature]? – MattMcKnight

+0

Когда я помещаю params [: user] [: signature] в мою функцию обновления, я получаю правильное значение. Я новичок в Rails, так как продолжать? В чем разница между puts params [: user] [: signature] и помещает @ user.signature? – Newbie

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