为什么我的rails应用程序中出现No Method Error?

时间:2011-09-09 09:20:03

标签: database ruby-on-rails-3 migration nomethoderror

我知道我是新手并且我不值得,但有人可以向我解释为什么我会得到No Method Error?这就是我做的。我为我的数据库生成了一个新的迁移到我现有的rails应用程序,迁移称为“配置文件”。我运行db:migrate,然后继续编辑我以前的“new.html.erb”表单。代码如下所示:

class CreateProfiles < ActiveRecord::Migration
  def self.up
    create_table :profiles do |t|
      t.string :major
      t.string :year
      t.string :books_sell
      t.string :books_buy
      t.string :facebook
      t.string :restaurants
      t.string :interests

      t.timestamps
    end
    add_index :profiles, :major
    add_index :profiles, :year
    add_index :profiles, :books_sell
    add_index :profiles, :books_buy
    add_index :profiles, :facebook
    add_index :profiles, :restaurants
    add_index :profiles, :interests
  end

  def self.down
    drop_table :profiles
  end
end

基本上,我在我的应用程序中添加了一个配置文件部分,但我得到了这个:

   undefined method `major' for #<User:0x00000100b6e030>
    Extracted source (around line #23):

    20:   </div>
    21:   <div class="field">
    22:     <%= f.label :"major" %><br />
    23:     <%= f.text_field :major %>
    24:   </div>

这是我的views / users / new.hmtl.erb文件:

<h1>Sign up</h1>

<%= form_for(@user) do |f| %>
  <%= render 'shared/error_messages', :object => f.object %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation, "Confirmation" %><br />
    <%= f.password_field :password_confirmation %> 
  </div>
  <div class="field">
    <%= f.label :"year" %><br />
    <%= f.text_field :year %>
  </div>
  <div class="field">
    <%= f.label :"major" %><br />
    <%= f.text_field :major %>
  </div>
  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

缺少什么?

2 个答案:

答案 0 :(得分:1)

这里的问题是我以前在用户模型下完成了表单视图。我想要粘贴到该表单上,因此我创建了一个名为profile的新迁移。我之所以这样做,是因为我无法手动回滚用户模型的迁移,只是简单地处理字符串和列。

但是,在用户模型下添加配置文件模型中的文本字段会产生错误。

我所做的是创建了Add_xxx_to_yyy迁移,这使我可以在以前创建的迁移中添加列而不会出现任何问题。我使用了rails generate migration Add_profile_to_User和下划线,因为我在rails 3.0上(当我Addprofiletouser时它没有用)。 Etvoilà!

答案 1 :(得分:0)

您已粘贴Profile模型的迁移。我想,在您的@user变量中,您拥有User模型的新实例。

由于没有为您的用户定义任何方法或属性major,您会看到投诉“未定义的方法......”