1

私はRubyから始めていますが、ビューに情報を表示する際に問題が発生しました。

ここに私のコードがあります: e app/models/user.rb

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :encrypted_password, :meta_attributes

  has_one :meta
  accepts_nested_attributes_for :meta
end

*app/controllers/users_controllers.rb*

  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
  end

アプリ/ビュー/ユーザー/index.html.rb

<% @users.each do |user| %>
      <td><%= user.email %></td>
      <td><%= user.meta.last_name %></td>
    <tr>
      <td><%= link_to 'Show', user %></td>
      <td><%= link_to 'Edit', edit_user_path(user) %></td>
      <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>

期待していましたか、いくつかのエラーが返されます:

undefined method `last_name' for nil:NilClass

手がかりはありますか?

4

2 に答える 2

1

エラーは、使用する行から発生します

user.meta.last_name

ということuser.metaですnil

meta作成中に各ユーザーに を追加したことが確実な場合、リストmetaにないという事実から問題が発生する可能性がありますattr_accessible

metaユーザーごとに常に作成するわけではなく、空であってもかまわない場合は、モデルmetaにコールバックを追加できます。User

before_create :add_meta

def add_meta
    if self.meta.nil?
        self.meta = Meta.create( put_your_default_attributes_here )
    end
end
于 2013-03-06T13:22:40.107 に答える
0

あなたはすでにこの問題を解決していると確信していますが、私はここで同じ問題を抱えていて、条件内に「nil」メソッドを入れて解決しました。たぶん、同じ問題を抱えている人を助けることができます。

<td>
  <% if user.meta %>
    <%= user.meta.last_name %>
  <% end %>
</td>
于 2016-02-07T01:01:30.793 に答える