1

我一直在努力让它工作 3 天。我似乎无法理解为什么它不起作用。当用户单击视图上的 link_to 标记时,它应该在控制器中执行 csv 函数。Instread 我得到一个例外。


以下是相关文件

控制器文件:(users_controller.rb)

def csv 

end

(路线.rb):

resources :users 

查看:(show.html.erb)

 <%= link_to 'Click HERE to open file', @user.image.url  %><br/><br/><br/>
 <%= label_tag(:q, "Parse CSV File:") %><br/>
 <%= link_to 'CSV', csv_user_path %>
 <% end %>

当我点击上面的“link_to 'CSV'.. 标签时。它给了我这个例外:

 NameError in Users#show 
 Showing /Users/AM/Documents/RailsWS/bmc_mam/app/views/users/show.html.erb where line #47 raised:
Extracted source (around line #47):

44:         
45:  <%= label_tag(:q, "Parse CSV File:") %><br/>
46:  
47: <%= link_to 'CSV', csv_user_path %>
48:             
49:         
50:         

出现异常时浏览器URL如下:

http://localhost:3000/users/28

它显然可以使用该功能,但 URL 映射/路由显然搞砸了。我想知道如何解决它.....在过去的几天里,我尝试了几种方法,似乎都没有奏效。这是我最接近使它像...一样工作的方法

在此先感谢您的帮助。


在@Gavin Miller 在下面发布答案后:

我将我的 routes.rb 文件更改为:

get 'csv' => 'users#csv'
resources :users 

现在我得到了这个例外:

NameError in Users#show

Showing /Users/AM/Documents/RailsWS/bmc_mam/app/views/users/show.html.erb where line #47    raised:

undefined local variable or method `csv_user_path' for #<#  <Class:0x00000104e7f6f8>:0x00000103a23c68>

Extracted source (around line #47):

44:         
45:             <%= label_tag(:q, "Parse CSV File:") %><br/>
46:             
47:             <%= link_to 'CSV', csv_user_path %>
48:             
49:         
50:         
4

1 回答 1

1

仅仅声明resources :users只会推断出 7 个标准的 RESTful 动作1。如果您想csv被接受为路线,则必须明确定义它:

get 'csv' => 'controller#action'

哪里controller == usersaction == csv


重新解决已编辑的问题...您需要将用户对象传递给csv_user_path函数:

<%= link_to 'CSV', csv_user_path(@user) %>

看起来您还希望 url 与用户相关联,因此您可以将其声明为 amember以获取类似的 url:http://localhost:3000/users/28/csv对于该结果,您可以使用以下代码:

resources :users do
  member do
    get 'csv'
  end
end


1 RESTful 动作index, new, create, show, edit, update, destroyRails 路由指南

于 2012-05-02T20:11:26.943 回答