Почему я получаю сообщение об ошибке «Нет метода» в приложении rails? - PullRequest
0 голосов
/ 09 сентября 2011

Я знаю, что я новичок в этом и что я не достоин, но может кто-нибудь объяснить мне, почему я получаю ошибку «Нет метода»?Вот что я сделал.Я сгенерировал новую миграцию для своей базы данных на свое существующее приложение 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>

Это мои взгляды / пользователи / новыеФайл .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 ]

1 голос
/ 10 сентября 2011

Проблема заключалась в том, что у меня ранее было заполнено представление формы в соответствии с моделью пользователя. Я хотел прикрепить к этой форме, и поэтому я создал новую миграцию с именем профиля. Я сделал это, потому что мне не удалось вручную откатить миграцию пользовательской модели и просто привязать строки и столбцы.

Однако при добавлении текстовых полей из модели профиля в пользовательской модели возникает ошибка.

Вместо этого я создал миграцию Add_xxx_to_yyy, которая позволила мне без проблем добавить столбцы в ранее созданную миграцию. Я использовал rails generate migration Add_profile_to_User с подчеркиванием, потому что я на рельсах 3.0 (это не работало, когда я делал Addprofiletouser). Et voilà!

0 голосов
/ 09 сентября 2011

Вы вставили свою миграцию для Profile модели.И я предполагаю, что в вашей переменной @user есть новый экземпляр модели User.

И поскольку для вашего пользователя не определен метод или атрибут major, вы видите жалобу "неопределенный метод ..."

...