NoMethodError в ProfilesController # создать - PullRequest
0 голосов
/ 19 июля 2011

Я пытаюсь создать связанную форму для профилей, но по какой-то причине, когда я нажимаю кнопку отправки, я получаю NoMethodError, который не имеет смысла для меня, так как мой код точно такой же, как учебникСледую ... если учебник устарел ..

def create
@user = User.find(params[:user_id])
@profile = @user.profiles.create(params[:profile])
redirect_to user_path(@user)
end

Кто-нибудь знает, почему я получаю неименные ошибки?Форма, принадлежащая контроллеру, приведена ниже: https://github.com/imjp/SuperModel/blob/master/app/views/users/show.html.erb


РЕДАКТ. 1: Исправлено!Следующий код не отображает данные профиля в http://localhost:3000/users/2 (то есть профиль # шоу), хотя: <%= @user.profile.first_name %>

Вот мои текущие профили # show
def show
@user = User.find(params[:user_id])
@profile = @user.profile.find(params[:id])
end

РЕДАКТИРОВАТЬ 2: Я обновил свой репозиторий github в https://github.com/imjp/SuperModel

Ответы [ 2 ]

1 голос
/ 19 июля 2011

Вы получаете undefined method 'first_name' for nil:NilClass, потому что пользователь с таким идентификатором не может быть найден.Вы, вероятно, посылаете неправильный параметр или что-то в этом роде.Как выглядит URL для вашего действия шоу?

edit:

измените ваш метод создания в users_controller.rb на этот

def create
@user = User.new(params[:user])
@user.build_profile

respond_to do |format|
  if @user.save
    format.html { redirect_to @user, notice: 'User was successfully created.' }
    format.json { render json: @user, status: :created, location: @user }
  else
    format.html { render action: "new" }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
 end
end

После того, как вы изменили этоизмените свою форму в app / views / users / show.html.erb на эту

<h3>Add Profile</h3>
<%= form_for([@user, @user.profile]) do |f| %>
<div class="field">
    <%= f.label :first_name %><br />
    <%= f.text_field :first_name %>
</div>
<div class="field">
    <%= f.label :last_name %><br />
    <%= f.text_field :last_name %>
</div>
<div class="field">
    <%= f.label :picture %><br />
    <%= f.text_field :picture %>
</div>
<div class="field"> 
    <%= f.radio_button(:sex, "male") %>
    <%= f.label(:sex, "Male") %>
    <%= f.radio_button(:sex, "female") %>
    <%= f.label(:sex, "Female") %>
</div>
<div class="actions">
    <%= f.submit %>
</div> 
<% end %>

, и она будет работать.Ваша ассоциация профиля пользователя не была построена.

1 голос
/ 19 июля 2011

почему @ user.profiles? попробуй @ user.profile (единственное число)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...