Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何创建模型的编辑/更新操作以在局部视图中显示_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何创建模型的编辑/更新操作以在局部视图中显示

Ruby on rails 如何创建模型的编辑/更新操作以在局部视图中显示,ruby-on-rails,Ruby On Rails,我目前有一个model:文件夹,它属于:user,并在用户登录时在主页上呈现每个文件夹。对于每个文件夹,都应该有一个“编辑”链接来更新文件夹的参数。以下是我到目前为止所拥有的内容(已经有了:folder的编辑表单): 在文件夹\u控制器中编辑/更新操作: def edit @folder = Folder.find(params[:id]) end def update @folder = Folder.find(params[:id]) if @folder.update_att

我目前有一个model:文件夹,它属于:user,并在用户登录时在主页上呈现每个文件夹。对于每个文件夹,都应该有一个“编辑”链接来更新文件夹的参数。以下是我到目前为止所拥有的内容(已经有了:folder的编辑表单):

在文件夹\u控制器中编辑/更新操作:

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
这就是我遇到的问题。这是在主页上呈现的:partial文件夹的一个片段:

<% if current_user?(folder.user) %>
  <%= link_to "edit", edit_folder_path(@folder) %> |
  <%= link_to "delete", folder, method: :delete,
                        data: { confirm: "You sure?" } %>
<% end %>

|
如果文件夹的当前用户已登录,则应显示“编辑和删除”链接。但是,我收到了以下错误:

ActionController::静态页面控制器主页中的UrlGenerationError

没有路由匹配{:action=>“edit”,:controller=>“folders”,:id=>nil}缺少必需的键:[:id]

但当我替换

<%= link_to "edit", edit_folder_path(@folder) %> 



它渲染良好,但不更新。我怎样才能解决这个问题?我必须为我的主页控制器创建一个实例变量吗?如果是这样的话,我该怎么说呢?

我想你有一个简单的打字错误。您应该使用
文件夹
,而不是
@文件夹
。换言之:

<%= link_to "edit", edit_folder_path(folder) %>


@folder
变量不存在,因此出现了
nil
错误消息。

与您的问题无关,但在控制器中,您最好将
folder.find
替换为
当前用户.folders.find
,否则任何人都可以更新任何文件夹。
<%= link_to "edit", edit_folder_path(folder) %>