我目前有一个模型:属于:user的文件夹,并在用户登录时呈现主页上的每个文件夹。对于每个文件夹,应该有一个“编辑”链接来更新文件夹的参数。这是我到目前为止(已经有一个编辑表格:文件夹):
在folders_controller中编辑/更新操作:
def edit
@folder = Folder.find(params[:id])
end
def update
@folder = Folder.find(params[:id])
if @folder.update_attributes(folder_params)
flash[:success] = "Folder updated"
redirect_to root_url
else
render 'edit'
end
end
这是我遇到问题的地方。这是在主页上呈现的:folder partial的片段:
<% if current_user?(folder.user) %>
<%= link_to "edit", edit_folder_path(@folder) %> |
<%= link_to "delete", folder, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
如果该文件夹的当前用户已登录,则应显示编辑和删除链接。但是,我收到此错误:
ActionPtroller :: VirtualPagesController中的UrlGenerationError #home
没有路由匹配{:action =&gt;“edit”,:controller =&gt;“folders”,:id =&gt; nil}缺少必需的密钥:[:id]
但是当我替换
<%= link_to "edit", edit_folder_path(@folder) %>
带
<%= link_to "edit", edit_folder_path(id: 61 (or some random folder id) %>
它渲染得很好,但没有更新。我怎样才能解决这个问题?我是否必须为我的主控制器创建一个实例变量?如果是这样,我该怎么做?
答案 0 :(得分:0)
我认为你有一个简单的拼写错误。您应该使用@folder
而不是folder
。换句话说:
<%= link_to "edit", edit_folder_path(folder) %>
@folder
变量不存在,因此出现nil
错误消息。