尝试将嵌套资源(名为'folders')索引嵌入到父(名为'user')'show'查看器中,我发现了一个问题。在进行数据库创建/迁移之后(当尚未对'folders'表进行任何显式操作时),我创建用户条目。创建之后,此用户的“show”方法显示了一个字段为NilClass的文件夹。一个条目,无论显示哪个用户,默认情况下它始终包含此Nil-ed条目。我可以添加其他条目,但始终会显示此条目。
还有一个有趣的事情:在rails console @ user.folders中返回空数组并且其#each方法运行良好(即在控制台中所有工作都正常,此问题不会出现在那里)。
这是嵌套资源的'create'方法:
class FoldersController < ApplicationController
def create
@user = User.find params[:user_id]
@user.folders.create params[:folder]
redirect_to user_path @user
end
users / show.html.haml - 父查看器(用户信息输出被切断以使代码更容易阅读):
Add a folder:
=form_for [ @user, @user.folders.build] do |f|
.field
=f.label :name
=f.text_field :name
.actions
=f.submit
%br
User's folders:
%table
%tr
%th Name
%th
%th
-@user.folders.each do |folder| # Will make at least one iteration even if
# no entries have been created yet. Works
# properly in rails console
%tr
%td= folder.name.class ## here will be NilClass in that default entry
%td= link_to 'Show', user_folders_path(@user, folder)
%td= link_to 'Delete', [@user, folder], :confirm => 'Are you sure?', :method => :delete
我是Rails和基于网络的应用程序的新手,所以,如果没有正确描述某些内容,请随时提出问题,并批评编码错误。
UPD: UserController :: create方法:
def create
@user = User.new(params[:user])
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
答案 0 :(得分:1)
我刚遇到类似的问题。在您的form_for标签中,您正在使用
@user.folders.build
使用适当的user_id属性将空文件夹记录添加到文件夹对象。
在你的代码中降低你正在迭代相同的文件夹对象,这就是你看到空记录的原因。
如果您只是将表单代码放在文件夹代码表下面,您将看到空记录不再存在(因为它尚未创建!)