0

我知道我是这方面的新手并且我不值得,但是有人可以向我解释为什么我会收到无方法错误吗?这就是我所做的。我为我的数据库生成了一个新的迁移到我现有的 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>

这是我的意见/用户/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 %>

少了什么东西?

4

2 回答 2

1

这里的问题是我之前在用户模型下完成了一个表单视图。我想加入那个表格,所以我创建了一个名为 profile 的新迁移。我这样做是因为我无法手动回滚用户模型的迁移,而只能添加字符串和列。

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

我所做的是创建了一个Add_xxx_to_yyy迁移,它允许我将列添加到先前创建的迁移中而没有任何问题。我使用rails generate migration Add_profile_to_User下划线是因为我在 rails 3.0 上(当我这样做时它不起作用Addprofiletouser)。瞧!

于 2011-09-09T21:58:47.347 回答
0

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

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

于 2011-09-09T09:28:24.333 回答