Я создал приложение, в котором у пользователя есть_один профиль, а профиль принадлежит пользователю. Он настроен так, что профиль создается автоматически при создании пользователя (в пользовательском контроллере).
Я не пытаюсь настроить его так, чтобы пользователь мог посещать страницу редактирования (контроллер профиля -> действие редактирования) и редактировать информацию своего профиля через отображаемую форму (используя часть _form)
Я не могу понять, почему я не могу отобразить форму редактирования, насколько я могу судить, метод определен правильно? У кого-нибудь есть идеи, почему? Очень признателен за любую помощь!
Браузер:
NoMethodError in ProfilesController#edit
undefined method `user' for nil:NilClass
def edit
@profile = @profile.user
end
def destroy
Контроллер профиля:
class ProfilesController < ApplicationController
before_action :logged_in_user, only: [:edit, :destroy]
def edit
@profile = @profile.user
end
def destroy
end
end
Контроллер пользователей
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
@user.profile = Profile.new
@user.send_activation_email
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
...
представления/профили/edit.html.erb
<% provide(:title, 'Edit Profile') %>
<h1>Editing profile</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@profile) do |f| %>
<%= render 'form', f: f %>
<%= f.submit "Edit Information", class: "btn btn-primary" %>
<% end %>
</div>
</div>
представления/профили/_form.html.erb
<%= render 'shared/error_messages' %>
<%= f.label :first_name %>
<%= f.text_field :first_name, class: 'form-control' %>
...