【问题标题】:no route matches error at file文件中没有路由匹配错误
【发布时间】:2010-05-20 09:02:57
【问题描述】:

渲染后出现路由匹配错误:部分

<% unless @user.uploads.empty? %>
 <% @user.uploads.each do |u| %>
 <tr>
 <td><%= link_to u.filename, u.filename %></td>

它给了我正确的文件名,比如http://localhost:3000/DSC00082.JPG。 我没有在我的路线上添加任何东西。 由于是 Rails 新手,请原谅我的(希望如此)简单的问题。

添加一个问题:对应的数据库条目是否只是文件名?

将上述代码改为

<% unless @user.uploads.empty? %>
 <% @user.uploads.each do |uploads| %>
 <tr>
 <td><%= link_to (uploads.filename, uploads) %></td>

并添加 map.resources :upload, 生成了“没有响应显示的操作”消息。在地址栏中,我的浏览器会显示相关数据集的 ID。

您好, 开发者

【问题讨论】:

  • 你的渲染:部分代码是什么?
  • 渲染部分代码在索引中;以上代码来自 _datafiles 'upload/datafiles' %>

标签: ruby-on-rails ruby


【解决方案1】:

如果uActiveRecord::Base 的子类,您的link_to 必须是这样的:

<%= link_to u.filename, u %>

相同的 Rails 会检测到 u 是一个带有控制器的对象,并将其转换为 REST 有效 URL(并将您重定向到 show 操作)。

如果这不是你的方案,请告诉我。

[编辑]

如果你知道 Rails 是如何工作的,请跳过这一段:

使用 map.resources :upload 你告诉 Rails 你有一个名为 Upload 的资源,它有一个 UploadController,并为 5 个操作生成路由:new/create, index, show, edit/updatedestroy。每个动作都需要控制器中的一个方法(参见 Rails Guides 中的 ClientsController 示例)。

当您没有UploadsController#show 时,“没有对节目做出回应”会引发。这种方法的一个例子:

def show
  @upload = Upload.find(params[:id])
  respond_to do |format|
    format.html
    format.xml {render :xml => @upload}
  end
end

这个方法渲染文件views/uploads/show(一定要创建它)。

【讨论】:

  • 不幸的是,这会引发“未定义的方法`upload_path'”消息;即使将所有关于“u”的内容都更改为“upload(s)”。
  • 你的 config/routes.rb 有一行“map.resources :uploads”(不带引号)?
  • 请参阅上面的编辑帖子。它必须是资源:我的控制器的上传以这种方式命名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多