在rails app中为link_to标记打破了路由/网址映射

时间:2012-05-02 20:07:24

标签: ruby-on-rails rails-routing url-mapping

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


以下是相关文件

控制器文件:(users_controller.rb)

def csv 

end

(routes.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:         

1 个答案:

答案 0 :(得分:1)

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

get 'csv' => 'controller#action'

其中controller == usersaction == csv


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

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

您似乎也希望将该网址与该用户相关联,因此您可以将其声明为member以获取类似以下内容的网址:http://localhost:3000/users/28/csv,您可以使用此结果代码:

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

<小时/> 1 REST index, new, create, show, edit, update, destroy行为{{1}}