我不确定我是否正确地构建了我的应用程序(我现在已经学习了Rails 2个月)但是我正在构建一个非常深度嵌套的应用程序,如下所示:
用户has_many帐户>帐户has_many字符>字符has_many项目
所以它的深度是4级(至少是计划)。
我目前处于角色状态,而且我在创建表单时遇到了问题:undefined method 'characters' for nil:NilClass
(screenshot)。
这是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
的 character.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 %>
答案 0 :(得分:2)
您收到此错误的原因是您未在show action中的用户控制器中定义@account,
class UsersController < ApplicationController
...
def show
@user = User.find(params[:id])
@account = @user.accounts.first # Otherwise @account == nil
...
end
...
end
此外,表单中的路线看起来不正确。
Character资源的create动作在路径中是这样的:
POST /:user_id/accounts/:account_id/characters
所以你需要提供:,user_id,:account_id和character
像这样:<%= form_for [@user, @account, @account.characters.build] %>