NoMethodError с глубоко вложенными моделями - PullRequest
0 голосов
/ 29 июля 2011

Я не уверен, правильно ли я структурирую свое приложение (я изучаю Rails уже 2 месяца), но я создаю довольно глубоко вложенное приложение, которое выглядит так:

учетные записи пользователя has_many> учетные записи has_many персонажей> символы has_many items

Так что это 4 уровня глубины (по крайней мере, это план).

Я сейчас нахожусь в символах и у меняпроблема при создании формы, которая выдает эту ошибку: undefined method 'characters' for nil:NilClass ( снимок экрана ).

Вот проект на github: https://github.com/imjp/d2shed

characters_controller.rb

 class CharactersController < ApplicationController 
   def create
     @user = User.find(params[:user_id])
     @account = Account.find(params[:account_id])
     @character = @account.characters.create(params[:character])
     redirect_to root_url
   end
 end



символов. rb

class Character < ActiveRecord::Base
  attr_accessible :name, :type  
  belongs_to :account
end



_form.html.erb

<%= form_for([@account, @account.characters.build]) do |f| %>
  <div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name %>
</div>
<div class="field">
<%= f.radio_button(:type, "SC") %>
    <%= f.label(:type, "SC") %>

    <%= f.radio_button(:type, "HC") %>
    <%= f.label(:type, "HC") %>

    <%= f.radio_button(:type, "SCL") %>
    <%= f.label(:type, "SCL") %>

    <%= f.radio_button(:type, "HCL") %>
    <%= f.label(:type, "HCL") %>
</div> 
<div class="actions">
<%= f.submit %>
</div>
<% end %>

1 Ответ

2 голосов
/ 29 июля 2011

Вы получаете эту ошибку, потому что вы не определяете @account в пользовательском контроллере в действии show,

class UsersController < ApplicationController 
...
  def show
    @user = User.find(params[:id])
    @account = @user.accounts.first # Otherwise @account == nil
    ...
  end
...
end

Кроме того, маршрут в вашей форме выглядит неправильно.

Действие create для ресурса Character выглядит следующим образом в маршрутах:

POST /:user_id/accounts/:account_id/characters

Таким образом, вам необходимо указать: user_id,: account_id и символ

следующим образом:

<%= form_for [@user, @account, @account.characters.build] %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...