0

ユーザーが身長を入力できるように、プロファイルページに「フィート」と「インチ」を追加する新しい移行を作成する必要がありました。コマンドを実行しました:

Railsは移行を生成しますAddFeetAndInchesToUsersfeet:integer inch:integer

それが機能するだろうと思っていましたが、機能しませんでした。エラーメッセージが表示されます`

"#User:0x007fe41dbe9520の未定義のメソッド`feet' "

`プロフィールページを表示しようとしたとき。

以前に「railsgresourceuser then-all-my-options-here」を実行してユーザーモデルで定義したので、他のすべてのフィールドをプロファイルページで機能させています。しかし今、私はフィート、インチ、宗教、そして宗教の重要性を定義する必要があります。既存のモデルに追加する方法がわかりません。

これらの値をdbフォルダーにあるcreate_profiles.rbに追加しました。profile.rbとuser.rbに追加されました。それらのどれも機能しません。私はそれを修正する必要があると信じています。attr_accessibleに入力しただけで、「フィート、オプション、宗教のオプション」が正しく機能するように、user.rb内に適切な方法で入力する必要があります。最初にターミナル。

User.rb

class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :about_me, :feet, :inches, :password, :birthday, :career, :children, :education, :email, :ethnicity, :gender, :height, :name, :password_digest, :politics, :religion, :sexuality, :user_drink, :user_smoke, :username, :zip_code
  validates_uniqueness_of :email
  validates_presence_of :password, :on => :create
  before_create { generate_token(:auth_token) }

  def send_password_reset
    generate_token(:password_reset_token)
    self.password_reset_sent_at = Time.zone.now
    save!
    UserMailer.password_reset(self).deliver
  end

  def generate_token(column)
    begin
      self[column] = SecureRandom.urlsafe_base64
    end while User.exists?(column => self[column])
  end
end

show.html.erb(プロファイルページ):

<h1><%= @user.username %></h1>

<h2>Basics</h2>

<%= form_for @user do |f| %>

    <div class="field">
        <%= f.label :height %><br/>
        <%= f.select :feet, [['Feet', nil], '4', '5', '6'] %>
        <%= f.select :inches, [['Inches', nil], '0', '1', '2', '3', '4',                    
                                '5', '6', '7', '8', '9', '10', '11'] %>
        </div>
    <div class="field">
        <%= f.label :children %><br/>
        <%= f.select :children, [['Do you have or want kids?', nil], 'Yes, they live with me', 'I want kids now', 'I want one someday', 'Not for me']%>
        </div>
    <div class="field">
        <%= f.label :religion %><br/>
        <%= f.select :religion, [['What is your faith?', nil], 'Agnostic', 'Atheist', 'Christian', 'Catholic', 'Buddhist', 'Hindu', 'Jewish', 'Muslim', 'Spiritual without affiliation', 'Other', 'None', 'Prefer not to say'  ]%><br/>
        <%= f.select :religion, [['How important is this to you?', nil], 'Very Important', 'Somewhat Important', 'Not Important']%>
        </div>
    <div class="field">
        <%= f.label :career %><br/>
        <%= f.text_field :career %>
    </div>
    <div class="field">
        <%= f.label :education %><br/>
        <%= f.select :education, [['What is your education level?', nil], 'High school', 'Some college', 'Undergraduate', "Bachelor's", "Master's ", 'PhD', 'Business school', 'Law school', 'Medical school' ]%>
        </div>
    <div class="field">
        <%= f.label :ethnicity %><br/>
        <%= f.select :ethnicity, [['What is your ethnicity?', nil], 'Asian', 'Black', 'Biracial', 'Indian', 'Hispanic/Latin', 'Middle Eastern', 'Native American', 'Pacific Islander', 'White', 'Other' ]%>
        </div>
        <%= f.label :user_drink %><br/>
        <%= f.select :user_drink, [['How much do you drink?', nil], 'Often Drinks', 'Sometimes drinks', 'Never drinks', 'No comment' ]%>
        </div><br/>
        <%= f.label :user_smoke %><br/>
        <%= f.select :user_smoke, [['How often do you smoke?', nil], 'Often smokes', 'Sometimes smokes', 'Never smokes'] %>
        </div>
    <div class="actions"><%= f.submit %></div>

    <h3>About Me</h3>

    <%= form_for @user do |f| %>

    <div class="field">
        <%= f.label :about_me %><br/>
        <%= f.text_field :about_me %>
    <div class="actions"><%= f.submit %></div>

<% end %>
<% end %>

add_feet_and_inches_to_users.rb(これは/ dbフォルダーにあり、投稿の上に投稿されたコマンドを実行した後に作成されました):

class AddFeetAndInchesToUsers < ActiveRecord::Migration
  def change
    add_column :users, :feet, :integer
    add_column :users, :inches, :integer
  end
end
4

1 に答える 1

1

私はもともと適切な手順に従いました。私を悩ませたのは、rake db:migrateを実行しようとしたときに受け取ったエラーです。列が重複していました。したがって、重複を見つけるために、「grep password_digestdb / migrate/*」を実行しました。その見返りに、重複したコンテンツを含むファイルが表示されたので、それらを削除すると、フィールドが機能するようになりました。

于 2013-02-28T12:14:58.657 に答える