私はRailsの初心者ですが、実際には明らかに「初心者の問題」に悩まされています。
「サウンド」足場コントローラーを手に入れたので、アクション「sendit」を追加する必要がありました。ビューからコントローラーへのサウンドにアクセスできません。
「http://127.0.0.1:3000/sounds/sendit.14 」にアクセスしようとすると、これがエラーになります(なぜ、sendit.14 で、 sound/sendit/14 や sounds/14/sendit ではないのですか?)
ActiveRecord::RecordNotFound in SoundsController#sendit
Couldn't find Sound without an ID
Application Trace | Framework Trace | Full Trace
app/controllers/sounds_controller.rb:74:in `sendit'
Request
Parameters:
{"format"=>"14"}
これが私のコードです:
サウンドコントローラー:
def sendit
@sound = Sound.find(params[:id]) # ----- Error is on this line -----
# Do Job
end
Index.html.erb
<% @sounds.each do |sound| %>
<% if sound.user_id == current_user.id %>
<tr>
<td><%= sound.title %></td>
<td><%= sound.user.email %></td>
<td><%= link_to 'Show', sound %></td>
<td><%= link_to 'Edit', edit_sound_path(sound) %></td>
<td><%= link_to 'Destroy', sound, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<td><%= link_to 'Send', sounds_sendit_path(sound) %></td>
ルート.rb
devise_for :users
match "/sounds/sendit/", :controller => "sounds", :action => "sendit"
resources :users, :sounds
既存のコントローラーにアクションを追加するため、ルートファイルでこれを行いました(Ruby on Rails)
rake routesを実行すると、出力は次のようになります。
[...]
sounds_sendit /sounds/sendit(.:format) sounds#sendit
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
sounds GET /sounds(.:format) sounds#index
POST /sounds(.:format) sounds#create
new_sound GET /sounds/new(.:format) sounds#new
edit_sound GET /sounds/:id/edit(.:format) sounds#edit
sound GET /sounds/:id(.:format) sounds#show
PUT /sounds/:id(.:format) sounds#update
DELETE /sounds/:id(.:format) sounds#destroy
root / home#index
(実際には最初の行がわかりません。なぜ POST / GET がないのか、なぜ他のデフォルト アクションのように sound_sendit で sendit_sound がないのか? どうすれば修正できますか?)
ご協力ありがとうございました