Rails: новая миграция, но ноль в контроллере - PullRequest
1 голос
/ 23 декабря 2009

Я создал новую миграцию:

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

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

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

<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 %>

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

  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

Ответы [ 4 ]

1 голос
/ 05 января 2010

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

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

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

attr_accessible :login, :email, :password, :password_confirmation, :signature
1 голос
/ 23 декабря 2009

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

RAILS_ENV=development rake db:migrate

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

Далее, если вы используете mongrel / 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. Явная установка: значение может где-то мешать

1 голос
/ 23 декабря 2009

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

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

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

0 голосов
/ 23 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...