0

作成中の音楽アプリがあります。アーティストが音楽ファイルをアップロードできるように設定したいのですが、管理者がファイルを承認してスパムでないことを確認するまで、インデックス ページには表示されません。ユーザー リソースの下に曲リソースをネストし、メンバーの承認を呼び出しましたが、以下のエラーが発生します。曲を作成していない管理者ユーザーによって呼び出されている場合、ネストされたメソッドを呼び出すにはどうすればよいですか。

ActiveRecord::RecordNotFound in SongsController#approve
Couldn't find Song with id=1
app/controllers/songs_controller.rb:35:in `approve'

曲IDは実際には13です。

曲コントローラの承認機能:

def approve
    @song = Song.find(params[:id])
    @song.accept
    #UserMailer.invitation_confirmation.deliver
    redirect_to :back, :only_path => true, :success => "Sent approval for #{@song.title} to #{@song.user.name} at #{@song.user.email}." 
  end

ユーザーコントローラーで私が持っているアクションを表示します

def show
    @songs = Song.all 
    @user = User.find(params[:id])
  end

ルート ファイル内:

resources :users do 
    resources :songs do 
      get 'approve', on: :member
      get 'decline', on: :member
    end
  end

そして、私が持っている管理ダッシュボードのビューで

<% if @user.admin? %>
    <% @songs.each do |song| %>
        <%= image_tag song.artwork_url(:thumb) if song.artwork? %>
        <h4>Title</h4><p><%= song.title %></p>
        <h4>Album</h4><p><%= song.album %></p>
        <p><%= song.current_state %></p>
        <%= link_to "Approve", approve_user_song_path(song) %> | 
        <%= link_to "Decline", decline_user_song_path(song) %>
    <% end %>
<% end %>
4

1 に答える 1

0

私はそれを考え出した。前述のようにネストされたリソースでapprove_user_song_pathある/users/:user_id/songs/:id/approve(.:format)ため、を探しているため、管理者をユーザーのものとしてuser_id渡しますが、管理者は曲を作成したユーザーではないため、エラーが発生します。これを解決するために、ユーザーと曲の両方を引数として承認メソッドと拒否メソッドに渡しました。user_idid

したがって、ショー テンプレートでは次のようになります。

<% @songs.each do |song| %>
        <%= image_tag song.artwork_url(:thumb) if song.artwork? %>
        <h4>Title</h4><p><%= song.title %></p>
        <h4>Album</h4><p><%= song.album %></p>
        <p><%= song.id%></p>
        <%= song.user_id %>
      <%= song.current_state %>
        <%= link_to "Approve", approve_user_song_path(song.user, song) %> | 
        <%= link_to "Decline", decline_user_song_path(song.user, song) %>
    <% end %>

これでうまくいきました。@mbratch のコメントに感謝します。これが、私のようなレールに慣れていない人に役立つことを願っています。:)

于 2013-07-03T15:54:31.733 に答える