Rails:新的迁移,但在控制器中没有

时间:2009-12-23 12:03:28

标签: ruby-on-rails

我创建了一个新的迁移:

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

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

现在我的usertable有一个名为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 %>

但这不起作用。 在我的控制器中,我总是将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

4 个答案:

答案 0 :(得分:1)

检查以确保您运行适当环境(开发,生产)的迁移

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

由于您在form_for中调用@user上的表单,因此该值已经是当前值。显式设置:值可能会干扰某处

答案 1 :(得分:1)

两个简单的问题 -

  1. 为什么我们要查看edit.html.erb并在此处更新?您是否已使用new.html.erb创建此记录并创建?

  2. 为什么你有<%= f.text_area(:signature, :value => @user.signature) %>而不只是<%= f.text_area :signature %>

答案 2 :(得分:1)

好的,我发现了我的错误! 在我的用户模型中,我有

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

我补充说:签名,现在它正在运作!

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

答案 3 :(得分:0)

为了确定,您已运行rake db:migrate来运行迁移,是吗?