1

私はこれを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マッピング/ルーティングは明らかに混乱しています。どうすれば修正できるのだろうか.....過去数日間にいくつかのアプローチを試しましたが、どれも機能していないようです。これは、Iveが次のように機能させるのに最も近いものです...

よろしくお願いします。


@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をユーザーに関連付けたいように見えるので、次のmemberようなURLを取得するように宣言http://localhost:3000/users/28/csvできます。その結果、次のコードを使用できます。

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


1RESTfulアクションはRailsルーティングガイドindex, new, create, show, edit, update, destroyに見られるとおりです

于 2012-05-02T20:11:26.943 に答える