これが私のコードです:
// swimmer.rb (モデル) 内:
belongs_to :user
// user.rb (モデル):
has_one :swimmer, :dependent => :destroy
accepts_nested_attributes_for :swimmer, :allow_destroy => true
attr_accessible :swimmer_attributes
// swimmers_controller.rb 内:
def profile
@swimmer = Swimmer.find_by_user_id(current_user)
@swimmer_nickname = @swimmer.nickname
@swimmer_gender = @swimmer.gender
@title = "Swimmer Profile for #{@current_user.email}"
end
// profile.html.erb 内 (swimmers ビュー フォルダー内)
<% if @swimmer %>
<h3><%= @title %></h3>
<p>Nickname: <%= @swimmer_nickname %></p>
<p>Gender: <%= @swimmer_gender %></p>
<% else %>
<h3>No Swimmer Profile for<%= current_user.email %></h3>
<% end %>
(Devise gem を使用して) ログインしているユーザーがいて、そのユーザーに対してスイマーが作成されているため、swimmers#controller メソッドの @swimmer インスタンス変数と一致する user_id がスイマー オブジェクトにある場合、プロファイル ビューは次のように機能します。意図されました。そうでない場合、ページに次のエラーが表示されます。
NoMethodError (undefined method `nickname' for nil:NilClass):
app/controllers/swimmers_controller.rb:66:in `profile'
しかし、プロファイル ビューには if/else 条件があるため、ログインしているユーザーに関連付けられているスイマー オブジェクトをなくして、ビューに else コンテンツを強制的に表示させたいと考えています。どうやら、「Swimmer.find_by_user_id(current_user)」メソッドは NilClass に nil オブジェクトを作成しています。何も作成せず、else 条件を表示するようにするにはどうすればよいですか?
リポジトリはhttps://github.com/drollwit/vst2/tree/ver2にあります。これは演習であり、実際のプロジェクトではありません。ここにはおそらく簡単な答えがありますが、私はそれを理解できません(まだRailsの基礎を学んでいます)。どんな助けでも大歓迎です。